表达式和运算符学习笔记

来源:互联网 发布:php九九乘法表 编辑:程序博客网 时间:2024/05/01 23:55

1.“=”、“==”、“===” 赋值、相等、恒等的区别

“=” 称作“得到或赋值”

“==”称作相等运算符,用来检测两个操作数是否相等,这里“相等“的定义非常宽松,可以进行类型转换

”===“严格相等运算符,比较过程没有任何类型转换


2.”+“运算符更偏爱字符串,比较运算符更偏爱数字

”+“运算符:如果两个操作数其中一个是字符串,则进行字符串连接

比较运算符:只有两个操作数都是字符串时才进行字符串比较,否则进行数字比较


3.in运算符

in运算符希望它的左操作数是一个字符串或者可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数数值的属性名,则返回true。

var point = { x:1, y:2 };

"x" in point               //返回true


4.instanceof运算符

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。

当通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对"父类”的检测。


5.逻辑与(&&)

如果做操作数是真值,“&&”操作将计算右操作数的结果,并将其返回作为整个表达式的结果;如果做操作数是假值,“&&”操作将左操作数结果返回作为整个表达式的结果,而不计算右操作数。返回结果并不总是true或false。

var o = { x:1 };

var p = null;

o && o.x;     //返回1。o是对象,所有对象都转换为true,返回右操作数结果

p&&p.x;        //返回null。p是假值,直接将其返回


5.eval()

直接调用eval()时,它总是在调用它的上下文作用域内执行。其他间接调用则使用全局对象作为其上下文作用域。

严格模式下的"eval"列为保留字,这让eval()更像一个运算符。不能用一个别名覆盖eval()函数。

var geval = eval;                       //使用别名调用eval将是全局eval
var x ="global",y="global";
function f(){
    var x="local";
    eval("x+='changed';");           //直接eval更改了局部变量的值
    return x;                                 //返回更改后的局部变量
}
function g(){
    var y="local";
    geval("y+='changed';");        //间接调用改变了全局变量的值
    return y;                                //返回未更改的局部变量
}
console.log(f(),x);                    //
localchangedglobal
console.log(g(),y);                   //
localglobalchanged

6.delete运算符

用来删除对象属性或数组元素。删除数组元素不改变数组长度。通过var语句声明的变量是不可删除的。

var a=[1,2,3];
delete a[2];
2 in a;                                       //false

a.length;                                   //3. 





0 0
原创粉丝点击