3.5 操作符
一元操作符
+和-
+(非数值) <==> Number(非数值)
位操作符
ES中所有数值以64位存储,但位操作符按32位进行操作,第32位是符号位
负数使用的格式是二进制补码
1)求该负数的绝对值的二进制码
2)求二进制反码,0和1互换
3)得到的二进制反码加1
按位非(~)、按位与(&)、按位或(|)、按位异或(^)、左移(<<)、有符号的右移(>>)、无符号右移(>>>)
布尔操作符
!
先将操作数转换为布尔值,再求反
!!(操作数) <==>Boolean(操作数)
乘性操作符* / %
如果操作数不是数值,在后台调用Number()
Infinity*NaN=NaN
Infinity/Infinity=NaN, 0/0=NaN, 1/0=Infinity
Infinity%1212=NaN, 123%0=NaN, Infinity%Infinity=NaN
加性操作符+ -
也会调用Number()
Infinity+(-Infinity)=NaN, +0+(-0)=+0
Infinity-Infinity=NaN, (-Infinity)-(-Infinity)=NaN, +0-(-0)=-0, -0-(-0)=+0
关系操作符<、>、<=、>=
任何数与NaN进行比较都是false
相等操作符==和===
==先转换再比较
===只比较不转换
null==undefined==>true
null===undefined==>false
条件操作符
variable = boolean_expression ? true_value : false_value;
逗号运算符
总会返回表达式中最后一项 var num=(5,1,3,0,2); //结果2
3.6 语句
1.if语句
2.do-while语句
3.while语句
4.for语句(循环内部定义的变量也可以在外部访问到)
5.for-in语句(用来枚举对象的属性,没有顺序,使用前先确认该对象的值不是null或undefined)
6.label语句(通常配合for循环嵌套使用,从而返回代码中特定的位置)
7.break和continue语句
break:跳出整个循环,i++不执行
continue:跳出本次循环
8.with语句(将代码作用于设置到一个特定的对象中 !!!不建议使用 !!!严格模式下不允许使用)
9.switch语句(比较值时使用全等)
3.1 语法
区分大小写
标示符(变量名、函数名或函数参数、属性名)可以是字母、下划线、美元符或数字
多行注释每行以*开头,提高可读性
严格模式 “use strict” 可以在整个脚本顶部设置,也可以在指定函数内部开头
语句--(最佳实践)1.分号结尾 2.即使只有一条语句也要使用代码块{}
3.3 变量
ECMAScript的变量是松散类型的,可以用来保存任何类型的数据
局部变量
使用var操作符定义的变量将成为定义该变量的作用域中的局部变量,函数中使用var定义的变量在函数退出后就会被销毁
严格模式
变量名不能为eval或arguments
3.7 函数
概述
不必指定是否返回值
可以通过return后跟要返回的值来实现返回值
return执行完之后立即退出函数,return之后的代码不执行
return可以不带任何返回值,用于停止函数又不需要返回值的情况
参数
1.函数不介意参数个数和参数数据类型
2.ES中的参数在内部是用一个数组表示的
3.函数体内通过arguments对象(类数组)访问这个参数数组
4.arguments对象可以和命名参数一起使用
!!!arguments的值永远与对应的命名参数的值保持同步,但是内存空间独立
5.没有传递值的命名参数自动赋予undefined
6.严格模式下 改变arguments的值不会影响命名参数的值
重写arguments会报错