转载请注明出处

原文连接 http://blog.huanghanlian.com/article/5b698e88b8ea642ea9213f4a

表达式和运算符

JavaScript 表达式

表达式是指能计算出值得任何可用程序单元。——Wiki

表达式是一种JS短语,可使JS解释器用来产生一个值。——《JS权威指南》

JavaScript 运算符

三元运算符

c ? a : b var val = true ? 1 : 2; // val = 1 //val值为true就会返回冒号前面的值,如果是false就会取冒号右边的值。

逗号运算符

a, b var val = (1, 2, 3); // val = 3 //非常少见的,它会从左到右依次去计算表达式的值,最后会取最右边的值。

delete 运算符

delete obj.x;var obj = {x : 1};obj.x; // 1delete obj.x;obj.x; // undefined//delete 运算符就是删除对象上的属性,变量obj,obj.x被删除了。

并不是对象上的所有属性都可以成功的被delete 掉的。

var obj = {};Object.defineProperty(obj, 'x', { configurable : false, value : 1});delete obj.x; // falseobj.x; // 1

只有configurable : true, 为true,才可以被删除。

in运算符

window.x = 1; //创建全局变量x为1x in window; // true 判断是否win下有x

instanceof, typeof运算符

{} instanceof Object // true 判断对象类型,基于原型链去判断的typeof 100 === ‘number’ // true 返回字符串,常用语原始类型,或者函数对象。

new运算符

function Foo(){}; //创建函数构造器,或者说创建空函数
Foo.prototype.x = 1; //prototype属性x
var obj = new Foo(); //创建一个新的对象obj
obj.x; // 1 现在就能在prototype属性x拿到1
obj.hasOwnProperty('x'); // false 来判断这个属性到底是这个对象上的还是这个对象原型链上,这个x当然不是属于直接对象上的属性,
obj.proto.hasOwnProperty('x'); // true 拿到对象原型。可以发现x是对象原型上的属性,而不是这个对象本身上的属性。

this运算符

this运算符; // window (浏览器) 在全局下this会指向winvar obj = { func : function(){return this;}};obj.func(); // obj//如果在对象值如果是个函数的话那么在这样的函数里,this会指向对象本身。

void运算符

void运算符是一元运算符,

void 0 // undefinedvoid(0) // undefined//不管值是多少都会返回undefined