表达式
js表达式有以下几种类型:
原始表达式
初始化表达式
函数表达式
属性访问表达式
调用表达式
对象创建表达式
原始表达式包括:
常量、直接量 3.14,"a"
关键字 null,this,true
变量 i,k,j
原始表达式和原始表达式之间可以通过运算符复合成复合表达式,如:3*4。
数组、对象的初始化表达式:
[1,2]
{x:1,y:2}
函数表达式:
var fe = function(){};
(function(){alert("ok")})();
属性访问表达式:
var o = {x:1};
o.x 或 o['x'] (二者等价)
调用表达式,即调用函数的表达式:
func();
对象创建表达式:
new Func(1,2);
new Object;//new Object(),当参数为空时,可以省略括号
运算符
按操作数的数量来分类,可以分为:
一元运算符: +num
二元运算符: a+b
三元运算符: c?a:b
按功能来分:
赋值: x += 1
比较: a == b; a < b
算术: a - b
位: a | b
逻辑: &&,||,AND,OR
字符串: "a" + "b" (这里的“+”号是字符串连接运算符)
特殊: delete obj.x
以下是常用的特殊运算符:
1、条件运算符:c?a:b
表达式c会返回一个boolean值,若返回的值为true,则取a;若返回的值为false,则取b,如:(2>3?2:3) -> 3
2、逗号运算符:a,b
从左到右依次计算各表达式的值,最后返回最后一个表达式的值作为返回结果。
var a = (1,2,3); // a = 3
3、delete运算符,用于删除对象的属性:delete obj.x
var obj = {x:1};
obj.x; //1
delete obj.x; //true
obj.x; //undefined
从ie9开始有了Object.defineProperty方法,可以用来设置属性是否可编辑:
var obj = {};
Object.defineProperty(obj,'x',{
configurable:false,//设置属性是否可编辑
value:1
});
delete obj.x; //false
obj.x; //1
4、in运算符,判断对象中是否有某个key:
window.x = 1;
'x' in window; //true
5、instanceof/typeof运算符:
Instanceof基于原型链判断对象的类型,返回一个boolean值;
typeof适用于判断原始类型和函数对象,返回一个string字符串。
6、new 运算符,用于创建对象,可以用来创造构造器的实例:
function foo(){};
foo.prototype.x = 1;
var obj = new Foo();
obj.x; //1
obj.hasOwnProperty('x'); //false,用hasOwnProperty判断是否是实例自身的属性
obj._proto_.hasOwnProperty('x'); //true
7、this运算符,this在不同的情况下代表不同的值:
this; //window(浏览器),全局this
var obj = {
func:function(){return this;}
};
obj.func(); //obj
8、void运算符,总是返回undefined:
void(0); //undefined;
void 0;
void('str'); //undefined
void 'str';
另外很重要的一点是运算符的优先级,具体可以参考这个链接:https://technet.microsoft.com/zh-cn/library/z3ks45k7 .