乐趣区

JavaScript 精粹 基础 进阶(2)表达式和运算符

转载请注明出处
原文连接 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; // 1
delete obj.x;
obj.x; // undefined
//delete 运算符就是删除对象上的属性,变量 obj,obj.x 被删除了。
并不是对象上的所有属性都可以成功的被 delete 掉的。
var obj = {};
Object.defineProperty(obj, ‘x’, {
configurable : false,
value : 1
});
delete obj.x; // false
obj.x; // 1
只有 configurable : true, 为 true,才可以被删除。
in 运算符
window.x = 1; // 创建全局变量 x 为 1
x in window; // true 判断是否 win 下有 x
instanceof, typeof 运算符
{} instanceof Object // true 判断对象类型,基于原型链去判断的
typeof 100 ===‘number’// true 返回字符串,常用语原始类型,或者函数对象。
new 运算符
function Foo(){}; // 创建函数构造器,或者说创建空函数 Foo.prototype.x = 1; //prototype 属性 xvar obj = new Foo(); // 创建一个新的对象 objobj.x; // 1 现在就能在 prototype 属性 x 拿到 1obj.hasOwnProperty(‘x’); // false 来判断这个属性到底是这个对象上的还是这个对象原型链上,这个 x 当然不是属于直接对象上的属性,obj.__proto__.hasOwnProperty(‘x’); // true 拿到对象原型。可以发现 x 是对象原型上的属性,而不是这个对象本身上的属性。
this 运算符
this 运算符; // window (浏览器) 在全局下 this 会指向 win
var obj = {
func : function(){return this;}
};
obj.func(); // obj
// 如果在对象值如果是个函数的话那么在这样的函数里,this 会指向对象本身。
void 运算符
void 运算符是一元运算符,
void 0 // undefined
void(0) // undefined
// 不管值是多少都会返回 undefined

退出移动版