JavaScript

JavaScript中特殊的运算符

常用的一些运算符

一元运算符: + - ++ -- ! ~(按位取反)
①一元运算符具有右结合性 也就是先和右边的操作数结合计算(? : 这个三元运算符和=也是右结合性)其余运算符都是左结合性
②优先级在所有运算符中最高

in 运算符
用于判断某个属性是否在对象或者数组中
eg:
var array=[1,2,3] 0 in array //true 这里0作为数组的属性,即array[0]

typeof 运算符
用于判断操作数的类型,并返回相应的字符串

typeof  1   //"number"
typeof  "1"  //“string”
typeof true // "boolean"
typeof null  // "object"
typeof undefined // "undefined"
typeof function c(){}  // "function"
typeof  new Date()  // "object"  除了方法,所有的内置对象返回的都是”object“

instanceof
二元操作符
x instanceof object //用来判断x是否是某种object(后者是object的派生类)的实例,这里不存在类型转换,即原始数据类型不会转换为包装对象。
eg:

1 instanceof Number // false;
function f(){};  f instanceof Function ; //true
object可以是自定义的类

delete运算符
用于删除对象,数组中的属性

var a={x:1,y:2};
delete x ;  //成功删除则返回true
x in a //false
var arr=[1,2,3];
delete arr[2];
2 in arr;// false
arr.length //3 

delete删除数组的属性时,并不会修改数组的长度,而是将被删除属性位置的值变为undefined。
用户通过var声明的变量不能删除(因为是不可配置的) ,通过function语句定义的函数和函数参数也不能删除。
在严格模式下操作数只能是对象属性,不能是变量,函数或函数参数

eval
eval("var x=1");
简单的说eval里面的字符串作为源代码执行,执行上下文和调用eval的上下文一致。

var myeval=eval;
可以给eval起别名,通过别名调用,字符串执行的上下文是全局对象,(此时不能读取、定义、修改局部变量和函数),直接eval的执行上下文和调用eval时的环境一样,比如放在一个函数里,则其上下文为调用这个函数的上下文环境。
myeval("var x=2");

严格模式下,不能用别名eval
此时的eval是局部eval,可以查询更改局部变量,但是不能定义新的变量或函数。