运算符优先级
借鉴班上一个同学的说法
袁(一元运算符)术(算术)移位(按位运算符),关系(关系运算符)位(位运算符)继(逻辑运算符)父(赋值运算符)
代码加不加分号的问题
不加分号,解释器一般根据情况看你后面是否会给你自动加。
通用原则:看后面代码和当前代码能不能一起执行,能就合并,不能就分开执行,如果都不能执行,就报错。
下面是特殊情况
var a=1
var b=2
a
++
b
等价于
var a=1;
var b=2;
a;
++b;
Null和Undefined
null:表示"没有对象",即该处不应该有值。
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
(3)不能当作变量声明
Object.getPrototypeOf(Object.prototype)
// null
undefined :表示"缺少值",就是此处应该有一个值,但是还没有定义
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(5)可以当作变量声明
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
参考表
对照表实际上,undefined值派生自null的,因此ECMA-262规定对它们的相等性测试要返回true
isNaN()
判断传入的值是否能转化为数字
Infinity=
数值转换
Number
- Boolean值,true和false转化为1和0
- 数字就是数字
- null值,返回0
- undefined,返回NaN
- 字符串,遵循下列规则
- 只包含数字的字符串,转为数字,浮点格式和原来保持一致,其他进制转化为十进制
- 空字符串(不包含任何字符串),转换为0
- 除了上述格式,转化为NaN
一元加
将你想操作的数据类型转换为数字
对象需要先调用他们的valueOf()和toString()
逻辑与的延伸
- 进行布尔值运算 var result=true&&false;
下面我们让两个操作数用表达式表示。
var a=1;
var b=2;
a==1&&b==3; //false
-
总结:如果并且 :如果 a...并且b....,那么... ,通常这语句我们用到if语句中。
用于判断
var a=1;
var b=2;
a==1&&(b=3); // 3
-
总结: 如果那么 :如果a等于1成立的话,继续运行后面的表达式,如果a不等于1,后面就没有必要执行,这称之为短路写法。
前面是判断语句,后面是执行语句。
逻辑或的延伸
- 进行布尔值的运算 var result=false||true
var a=1;
var b=2;
a==2||b==2//true
- 总结:或者 :a==2或者b==2,我们要进行什么样什么样的操作。
var a=1;
var b=2;
x=a||b //true
- 总结: 如果不...那么 :用于赋值 这也是短路写法
将逻辑与和逻辑或合并
a&&b||c
其中 a、b、c为表达式 ,如果a执行b否则执行c,
a:为判断语句
b:为执行语句
c:为执行语句
a满足的时候执行b,a不满足的时候执行c
等价于三目运算符 a?b : c 优先级逻辑运算符大于条件运算符
上面通常用于简单的if else语句,三目运算符用于赋值。
网友评论