第二章:表达式和运算符
目录
2-1 [JavaScript]表达式
原始表达式:常量、直接量、关键字、变量
原始表达式之间可以通过运算符复合成复合表达式,eg:10*20就是一个复合表达式。
数组初始化表达式:[1,2] 相当于 new Array(1,2); 还有数组中存在空的现象,如图:
对象初始化表达式:{x:1,y:2} 相当于var o = new Object();o.x = 1;o.y = 2;下图可参考
函数表达式:①将匿名函数赋给一个变量var fe = function(){};
②用()将函数括起来即可直接调用:(function(){console.log('hello world');})();
属性访问表达式:var o = {x:1}; 访问o的x属性有两种方式
①o.x ②o['x']
调用表达式:即调用一个函数,函数名后加上一个()即可,eg:fun()
对象创建表达式:使用new来创建一个函数(构造器),new Fun(1,2); 如果不需要传参的话,可以直接省略后面括号,即new Fun,表示创建一个空的对象;
综上:表达式分为六种:原始表达式、初始化表达式、函数表达式、属性访问表达式、调用表达式、对象创建表达式。
2-2 [JavaScript]运算符
按照数量区分:通过表达式之间运算符的数量可以分为一元、二元、三元运算符。
一元一般用于改变赋值,如+num。二元用于计算居多,如a+b。三元用于判断居多,如c?a:b。
按照功能区分:赋值运算符(x += 1),比较运算符(a == b),算术运算符(a - b),位运算符(a | b),逻辑运算符(aa && bb),字符串运算符,即字符串拼接("a" + "b"),特殊运算符(delete obj.x)。
特殊运算符:①逗号,运算符:var val = (1,2,3); 逗号表达式会从左至右依次计算表达式的值,故此处val的值最后会为最右边的值3。
②delete运算符:删除对象上的属性,不是所有的属性都可以通过delete进行删除。使用Object.defineProperty方法可以设置一个configurable标签,当configurable为true时该属性才能被删除。如图:
③in运算符:判断一个属性是否存在/属于某个对象。eg:aaa.x = 1; 'x' in aaa;输出结果为true。
④instanceof、typeof运算符,上一章已经介绍,略。
⑤new运算符,较为复杂,举例如下:
可以得出结论,通过new构造出来的实例(obj),实例可以获得原函数的属性,但该属性始终属于原函数,通过原型链查找可以找到x属性为实例原型链上的一个属性,若原型链过长,就需要继续判断或采取其他方法了。
⑥this运算符:在全局作用域下,如在浏览器中,全局下this指向为window。
通过obj.func.apply可以指定this,this在不同的情况下有不同的值。
⑦运算符void:一元运算符,较为少见。不论void后的操作数为何值,均返回undefined。
如void 0; //undefined 或 void (0); //undefined
运算符优先级
【注明】学习笔记来自慕课网免费的学习视频:《JavaScript深入浅出》——Bosn