您的位置:首页 > Web前端 > JavaScript

【js学习笔记-025】-- 表达式和运算符

2013-07-19 17:13 267 查看

原始表达式



对象和数组的初始化表达式



属性访问表达式


用”.”或”[]”来访问,”.”访问的属性是合法标识符的。

如果属性包含空格和标点符号,或是一个数字,则必须使用”[]”

运算符

运算符

操作
++

自增

--

自减

-

求反

+

转换为数字

~

按位求反

!

逻辑非

delete

删除属性

typeof

检测操作数类型

void

返回undefined值

*,/,%

乘,除,求余

+ , -

加,减

+

字符串连接

<<

左移

>>

右移

>>>

无符号右移

<,<=,>,>=

比较数字顺序

<,<=,>,>=

比较字母表中的顺序

instanceof

测试对象类

in

测试属性是否存在

==

判断相等

!=

不等

===

恒等

!==

判断非恒等

&

按位与

^

按位异或

|

按位或

&&

逻辑与

||

逻辑或

?:

条件运算符

=

*=,/=,%=,+=,-=,&=,^=,|=,<<=,>>=,>>>=

变量赋值,或对象属性赋值运算且赋值

,

忽略第一个操作数,返回第二个操作数

注意:js字符串是一个由16位整数值组成的序列,字符串的比较也只是两个字符串中的字符的数值比较。参数String.localCompare()方法来获取更多字符串比较的相关信息,它更加健壮

instanceof要求左操作数是一个对象,右操作数标识对象的类。如果左边不是对象,则返回false,如果右侧不是函数则抛一个类型错误异常。instanceof的判断是依照原型链继承机制,如 o
instanceof f首先计算f.prototype,然后在原型链上找o,找到就是ture,找不到,那么o就不是f的实例,instanceof返回false

eval():它是一个函数,但由于它被当成运算符来对待了,所以在此介绍。它只有一个参数。如果参数是字符串,它会把字符串当成javascript代码编译,如果编译失败则抛出一个语法错误异常。编译成功,则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,如果最后一个表达式或语句没有值,则返回undefined。关于eval()最重要的是它使用了调用它的变量作用域环境。

如:定义变量x

eval(“x”)返回定义的变量x

eval(“var y=3”) //声明一个新的局部变量

同样可以声明一个局部函数

eval(“function f(){ return x+1}”);

如果在最顶层代码中调用eval(),它会作用于全局变量和全局函数

ECMAScript3不允许eval()别名调用。如果这样做的话会抛出EvalError异常。

别名调用实际上大多数实现上是可以别名调用的。别名调用时会将字符串当成顶层全局代码来执行。可以创建新的全局变量和全局函数,或给全局变量赋值,但不能修改主调函数中的局部变量.

ECMAScript5 规定:直接调用eval()时,它总是在调用它的上下文作用域内执行,其它的间接调用则使用全局对象作为上下文作用域,并且无法读写定义局部变量和函数。

IE9之前没有全局eval一说,当通过别名调用时会抛出一个EvalError异常。但IE的确定义了一个名叫execScript()全局函数来完成全局eval的功能。

严格eval()(当使用”user
strict”):可以查询和更改局部变量,但不能在局部作用域内定义新的变量或函数。

typeof运算符返回值如下:

X

typeof X
undefined

“undefined”

null

“object”

true / false

“boolean”

任意数字

“number”

任意字符

“string”

任意函数

“function”

任意内置对象

“object”

任意宿主对象

编译器各自实现的字符串,但不是上述的这些

对象和数组的typeof结果是”object”,而不是”function”,因此它对于区分对象和其它原始值很有帮助。如果想区分对象的类,则需要使用其它的手段,比如使用instanceof、class特性、constructor属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: