AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## **浏览器端JavaScript****的组成** **ECMAScript****:语法规范** **DOM****:**Document Object Model  文档对象模型,操作页面元素 **BOM****:**Browser Object Model  浏览器对象模型,操作浏览器功能 ## **①****基本输出语句** **console.log**(“在控制台打印输出”) **document.write**(“在文档中书写”) **alert**(“弹窗输出”),省略了window调用对象,等同于window.alert **fn()**,函数调用也有归属,省略了window调用对象,等同于window.fn() ## **②****变量的声明** 不能使用**数字**和**下划线**开始,不能是**关键字**和**保留字**如:var class = XXX是不合理的,class是保留字 ## **③****数据类型** **基本数据类型:****number****、****string****、****boolean****、****undefined****、****null** **引用数据类型:****object ****数据存储在堆中,变量存储在栈中,变量通过引用路径找到对应的数据。引用类型进行复制,赋值时复制的是栈到堆的引用路径** **数据类型判断方法:** ## **a)****使用****typeof****判断数据类型,额外添加了****function****类型,所有判断结果如下:** **![](https://images2015.cnblogs.com/blog/1071151/201702/1071151-20170223001133929-480289080.png)** ## **b)****使用****instanceof****判断数据实例:** **ainstanceofb**判断a是否是b的实例或者子类,如果是,就返回true,不是就返回false var a = new Array(); function fn (a , b) { }; var b = new fn ( ); console.log(a instanceof Array);   返回true console.log(a instanceof Object);   返回true,因为Array是Object的子类 console.log(b instanceof fn);   返回true,因为b是fn构造函数的实例对象 console.log(fn.arguments instanceof Array);   返回false,因为arguments是伪数组,不是一个真正意义上的数组 ## **c)****使用****Object.prototype.toString.call(****value****)****判断数据类型:** ### **(****1****)判断基本类型:** Object.prototype.toString.call(null); ------ \[object Null\] Object.prototype.toString.call(undefined); ------ \[object Undefined\] Object.prototype.toString.call(“abc”); ------ \[object String\] Object.prototype.toString.call(123); ------ \[object Number\] Object.prototype.toString.call(true); ------ \[object Boolean\] ### **(****2****)判断原生引用类型:** **函数类型** function fn(){ } Object.prototype.toString.call(fn); ------ \[object Function\] **日期类型** var date = new Date(); Object.prototype.toString.call(date); ------ \[object Date\] **数组类型** var arr = \[1,2,3\]; Object.prototype.toString.call(arr); ------ \[object Array\] **正则表达式** var reg = /a/g; Object.prototype.toString.call(reg); ------ \[object RegExp\] **原生****JSON****对象:** Object.prototype.toString.call(**JSON**); ------ \[object JSON\] **注意:**Object.prototype.toString()本身是允许被修改的,这里讨论的前提都是假设toString()方法未被修改 ## **④****数值类型** Js中计算机能表示的最大值**:****Number.MAX\_VALUE****\=== 1.7976931348623157e+308** Js中计算机能表示的最小值:**Number.MIN\_VALUE****\=== 5e-324** **由于浮点数的存在,小数在运算中有时会出现丢失精度的情况:**     var a = 0.1;     var b = 0.2; console.log(a + b);   输出结果为:0.30000000000000004  console.log(a + b === 0.3)  输出结果为:false 所以在使用小数进行数值判断时,要注意这样的情况出现 **关于数值运算的基本方法:** **parseInt("123.45abc")** 返回123,舍弃小数与非数字部分,如果字符串不是数字开头,返回NaN **parseFloat("123.45abc")**返回123.45,舍弃非数字部分,如果字符串不是数字开头,返回NaN **Math****对象的基本方法:** **Math.ceil(1.4)**  向上取整,有小数就整数部分加1,返回2 **Math.round(1.5)** 四舍五入,返回2,如果是**负数**\-1.5,则为-1,-1.55为-2 **Math.floor(1.4)**  向下取整,返回1 **Math.random()**返回 0 ~ 1 之间的随机数 **Math.abs(x)**返回x的绝对值 **Math.max(x,y)**返回 x 和 y 中的最大值 **Math.min(x,y)**返回 x 和 y 中的最小值 **Math.PI**  表示无理数π的数值 **Math.exp(x)**返回 e 的指数 **Math.log(x)**返回数的自然对数(底为e) **Math.pow(x,y)**返回 x 的 y 次幂 **Math.sin(x)**返回x的正弦 **Math.cos(x)**返回x的余弦 **Math.tan(x)**返回x的正切 **Math.acos(x)**返回x的反余弦值 **Math.asin(x)**返回x的反正弦值 **Math.atan(x)**以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值 **Math.atan2(y,x)**返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间) **Math.sqrt(x)**返回x的平方根 **Math.toSource()**代表对象的源代码 **Math.valueOf()**返回一个 Math 对象的原始值,不常用 ## **⑤****字符串类型、****boolean****类型** 字符串:(转义字符如:\\n表示字符串换行等) Boolean类型:表示没有意义的值转换成boolean值都是false,例如:空字符串”” 、数值0、NaN、null、和undefined;其他都是true,例如:”false”、”0”都是true ## **⑥****数据类型转换** **转换成字符串:****toString()****、****String()****、****\+ “”**或者加一个空字符串 **转换成数字:****Number()**只能转换”123456”纯数字字符串;**parseInt()**可以转换”123px”;**parseFloat()**,可以转换”123.123.123”;如果字符串中的内容是数字,那么只用在后面减0,就会转换成数值类型,例如:(”32”-0)为32,此处如果用+0则没有效果,只能-0 ## **⑦****运算符** ## **(****1****)一元运算符****(****只有一个元素****)****:自加****++****、自减****\--****、非****!** ## **(****2****)逻辑运算符****&&****、****||****、****!** 短路操作(返回对当前表达式起决定作用的值):("”||”true”)返回:”true” ## **(****3****)运算符优先级,从高到底** **( )括号****优先级最高** **  > **一元运算符:++、 -- 、!   **  > **算数运算符:先\* 、/后+、- **  > **关系运算符:>、>=、<、<=  **  > **相等运算符:== 、!=、===、!==   **  > **逻辑运算符先&&,后|| ## **⑧****流程控制语句** ### **(****1****)选择语句** **a)****if**( ) { } else if ( ) { } else { }语句 **b)****三元运算符**:a === 2**?**console.log(“等于”)**:**console.log(“不等于”);使用结果等同于if , else **c)** **switch case default****语句**进行全等比较,只要全等就进入,没有break就一直执行,case里必须是具体的值,可以是返回值为boolean的表达式如:a > 3,但switch( true )中要传入boolean  var**a**\= 4   ** switch**(**a**) {        **case**3:             console.log("a");        **case**4: **这里满足条件,执行进入**             console.log("b");        **case**5:                             **代码执行结果: b , c**             console.log("c");           ** break**;        **default**:console.log("default") } ### **(****2****)循环语句** **a)****for**循环**for**( var i=0 ; i < 20;i++ ) {**break**} **b)****for in**循环**for**( var k**in**obj) { this\[k\]=obj\[k\]}  可以遍历对象的属性 **c)**** while**循环**while**( i <= 10 ){ i++; } **d)**** do while**循环**do**{ i++; }**while**( i <= 10 )**先执行**,**再判断**,所以**至少执行一次** ## **⑨****数组****Array** ## **(****1****)数组的声明** **构造函数声明:**var arr = new Array( 1 , 2 , 3 )  声明了一个数组为\[ 1 , 2 , 3 \] 如果只传**一个数值参数**var arr = new Array(**3**)  表示声明的数组的长度为3 **字面量声明:**var arr = \[ 1 , 2 , 3 \] ## **(****2****)数组的索引:从****0****开始,****\[ \].****length****表示数组的长度** ## **⑩****对象****Object** ## **(****1****)对象的声明** **构造函数声明:**var obj = new Object( )  **字面量声明:**var obj = { name:”Tom” , age:20 , SayHello:function(){      Console.log(“hello”) }}