JavaScript进阶:表达式和运算符
一、js表达式
定义:表达式是指能计算出值得任何可用程序单元。 ——wiki
表达式是js一种短语,可使js解释器用来产生一个值。 ——js《权威指南》
1.原始表达式。
常量/直接量: 3.14/ "test" 等
关键字: null,this,true,false 等
变量: i,k,j 等
复合表达式:原始表达式和原始表达式之间用运算符连接可以组成一个复合表达式。
例如: 10 * 20 这就是一个复合表达式
2.(数组、对象的)初始化表达式。
例如:
1 2 3 4 5 6 7 | [1,2] 等价于 new Array(1,2); [1,,,2] 等价于 new Array(1,undefined,undefined,2); {x:1,y:2} 等价于 var obj = new Object(); obj.x = 1;obj.y = 2; |
3.函数表达式。
var fn = function(){};
或者:
(function(){ console.log("hello") })();
如果你不理解函数表达式后面还会有对应的介绍。
4.属性访问表达式。
var obj = {x:1}
我们可以通过 obj.x 或者 obj["x"]来访问它的属性,这一类表达式就称之为属性访问表达式。
5.调用表达式。
func(); 来调用一个函数,这样的表达式就称之为调用表达式。
6.对象创建表达式。
例如:
new Func(1,2);我们可以传参,如果没有参数我们也可以new Object;创建一个空的对象这样也是合法的。
二、js运算符(一般用于表达式之间进行一些运算)。
1.按照运算符的操作数的数量:
一元运算符: +num
二元运算符: a + b
三元运算符: c?a:b
2.按照功能区分:
赋值:x += 1 (或者-=,=等)
比较:a == b
算数:a - b
位: a | b
逻辑: exp1 && exp2 (或与非)
字符串:“a” + “b”
特殊: delete obj.x
下面我们对特殊运算符展开来讲:
条件运算符:var c = true?1:2 //c=1
逗号运算符:var val = (1,2,3) // val = 3 从左到右依次计算,取最后的
delete运算符:就是删除对象上的属性。
--例如:var obj = {x:1}
obj.x //1
delete obj.x
obj.x //undefined
从IE9开始,我们可以给对象设置configurable标签,当configurable:true时属性才可以被delete掉
例:var obj = {}
Object.defineProperty(obj, 'x', {
configurable:false,
value:1
});
delete obj.x
obj.x //1
3. in 运算符。
例:window.x = 1;那我们想知道window到底有没有x呢,我们就可以用 in
”x“ in window; // true
4. instanceof 和 typeof 我们在上一章详细的介绍过,如果忘记了可以去看一下。
5. new运算符
比如说我们创建一个函数构造器:function Foo(){}
Foo.prototype.x = 1;
我们可以用new运算符就可以创建一个对象obj
var obj = new Foo();
这样obj.x; //1 我们就可以从它的构造器上的prototype属性上拿到 1
我们可以通过 obj.hasOwnProperty("x"); //false 来判断这个属性到底是对象上的还是对象的原型上的
obj._proto_拿到它的原型,obj._proto_.hasOwnProperty("x"); //true 说明是原型上的
6.this 运算符。
this; //window(浏览器)
var obj = {
func:function(){
return this;
}
}
obj.func(); // obj
this运算符也是比较特殊的这个我们后面会详细讲。
7.void运算符。
void 0 //undefined
void (0) //undefined
void无论后面的操作数是多少,返回的都是undefined。
8.运算符的优先级,也是建议大家去看一下,更有助于大家读懂复杂的表达式。