啃一啃犀牛书--表达式和运算符(2)

啃一啃犀牛书–表达式和运算符(2)

instanceof 运算符

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则返回true,否则返回false。
这里面要注意一点,它的工作性质,和原型链相关。假设我们判断 o instanceof f,js首先计算f.prototype,然后在原型链中查找o,如果找到返回true。这里如果f的原型
是另外一个类的实例的话,如果它存在,则也返回true。

逻辑表达式

js的逻辑表达式跟数学里面的基本上是一样,顶多就是写法不一样。主要是三个,与、或、非。
这里面有两点需要注意,第一,&& 的优先级是要高于 || 。第二,&&做连接的会先计算左表达式,如果左表达式不为true,就不会再计算右表达式。这里可能会存在某些坑,你在自测的时候看不出来。
比如你自测的时候,左表达式一直是false,你右表达里面可能会有一个类型错误,这个地方是不会报错的,因为已经直接跳过了。
|| 其实也是这样的道理,但左表达式为真就直接返回了。

赋值表达式 =

赋值表达式需要注意的是它的优先级,它的优先级是非常低的。

赋值表达式的结合性是从右至左的,要记住这一点哦~~

1
i = j = k = 0;//该如何解读呢?参照上面那句话~

eval()

eval()只接受一个参数。如果传入的参数不是字符串,直接返回这个参数,如果是字符串,则它会把字符串当成js的代码进行编译,如果编译失败则抛出一个语法错误。
这个函数用的不太多,这里不多做赘述,等第二次过犀牛书的时候,再来把这个坑填上。

条件运算符

“?” 说的就是它喽。它是js唯一的一个三元运算符。在日常代码中你可能会很频繁的用到它。用代码来说明,似乎会更简单。

1
2
3
4
5
6
7
8
var username = false;  //不确定的值
var a = 'hello';
if(username){
a += '111'
}else{
a += '222'
}
a += username ? '111': '222'

上下代码是等价的,应该你也可以看得出来,下面的代码写起来更简洁。你在写vue之类的时候,我们经常会判断环境变量执行不同的语句,经常性的用到三元运算符来简化代码。

typeof 运算符

首先它是一个一元运算符,其次,如果你不去自己敲代码试试的话,你可能会忽略一些东西。

1
2
3
4
5
6
var a = [1,2,3];
var b = null;
var c = function(){ return 1;}
typeof a // "object"
typeof b // "object"
typeof c // "function"

在这里已经看出不少问题了,如果你想检测一个数组,用typeof 似乎就不能实现你的功能了,如果你想检测一个值是否为null,似乎也要换种方法了。

delete运算符

delete运算符同样也是一个一元运算符。从字面上就能看出来,他是来做删除操作的。

1
2
3
4
5
6
7
8
9
var o = {};
o.x = 1;
delete o.x
console.log(o.x); //undefined
var b = [0,1,2];
delete b[2];
console.log(b[2]); //undefined
console.log(b.length); //3 只是单纯的删除了b最后一个元素,并不会改变这个数组的长度。
delete o //false

delete希望它的操作数是一个左值,如果它不是左值,那么delete僵不进行任何操作同时返回true。
否则,delete试图删除这个指定的左值。如果删除成功则返回true。然而并不是所有的属性都是可删除的,一些
内置核心和客户端属性是不能删除的,用var语句声明的变量也是不能删除的,通过function语句定义的函数和函数参数也是不能删除的。

void 运算符

这个我们基本上是不常用的。其意义:操作数会照常计算,但忽略计算结果并返回undefined。
我们比较常见的可能是这样的写法了。

1
<a href="javascript:void(0)"></a>

逗号运算符 ,

其实真的不知道这个东西该怎么说,很少关注。看解释:逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算
右操作数,最后返回右操作数的值。

忽然发现章节的划分有点失误了。这一章的知识点并不多,就当做是一个散心随笔好了~

在过犀牛书的过程中,又一次发现了之前没有关注的点。知识是慢慢积累的,积累起来的总归是有用的。
很有可能你下一个bug就是因为基础的忽略而造成的。千里之堤毁于蚁穴,为了不让千里之堤毁掉,还是跟我一起再
啃一啃犀牛书吧~~