五、操作符
算数操作符、位操作符、关系操作符、 相等操作符
- 一元操作符
++
和--
:注意a++
+
,-
- 位操作符
按位非(NOT)(~)、按位与(AND)(&)、按位或(OR)(|)、按位异或(XOR)(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>) - 布尔操作符
非,与,或 - 乘性操作符
乘、除、取模 - 乘性操作符
加法、减法、 - 关系操作符
小于、大于、小于等于、大于等于
1)如果是数值,则数值比较;
2)如果是字符串,则比较对应编码;
3)如果一个是数值,则转换为数值;
4)如果为一个对象,则调用valueOf()
或者toString()
,得到结果再根据前面规则进行比较
5)如果一个是布尔值,先转换为数值比较
6)与NaN比较都返回false - 相等操作符
相等和不相等先转换再比较,全等和不全等仅比较
1)null和undefined相等
2)都是对象情况下比较是否为同一对象 - 条件操作符
?: - 赋值操作符
右边的值赋给左侧的变量 - 逗号操作符
用于赋值总是返回表达式中最后一项
六、语句
- switch语句使用的是全等操作符
七、typeof和instanceof
typeof来判断基本数据类型
- 第一题
表达式是从右往左的,x由于变量提升,类型不是null,而是undefined,所以x=y=”undefined”。
var y = 1, x = y = typeof x;
x;//"undefined"
- 第二题
(function f(f){
return typeof f();//"number"
})(function(){ return 1; });
- 第二题
这一题考察的是this的指向。this永远指向函数执行时的上下文,而不是定义时的(ES6的箭头函数不算)。当arguments执行时,this已经指向了window对象。所以是”undefined”。
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();//"undefined"
})(foo.bar);
- 第四题
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();//undefined
- 第五题
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;//"number"
- 第六题
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;//"1undefined"
- 第七题
(function(foo){
return typeof foo.bar;//undefined
})({ foo: { bar: 1 } });
instanceof运算符可以用来判断某个构造函数的prototype属性是否存在于另外一个要检测对象的原型链上