2016年4月26日

[TOC]

2016年4月26日

javascript

对象

所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。 对象的所有键名都是字符串,所以加不加引号都可以。

  • 如果键名不符合标识名的条件(数字、空格或者运算符),也不是数字,则必须加上引号。

  • JavaScript的保留字可以不加引号当作键名。

  • 如果键名是数字,则会默认转为对应的字符串。

'1p': "Hello World",

for: 1,

1e2: true//100: true

对象生成

var o1 = {};
var o2 = new Object();
var o3 = Object.create(null);

操作属性

读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。但是,数字键可以不加引号,因为会被当作字符串处理。

所有全局变量都是window对象的属性。如果该属性不存在,就返回undefined,并不会报错。

查看所有属性

删除属性

一旦使用delete命令删除某个属性,再读取该属性就会返回undefined,而且Object.keys方法返回的该对象的所有属性中,也将不再包括该属性。

对象的引用

如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

o1和o2指向同一个对象,然后o1的值变为1,这时不会对o2产生影响。

in运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。

在JavaScript语言中,所有全局变量都是顶层对象(window)的属性。 in运算符的一个问题是,它不能识别对象继承的属性。

hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。

for…in循环

for...in循环用来遍历一个对象的全部属性。 for...in循环遍历的是对象所有可enumberable的属性,包括对象本身的属性,还包括对象继承的属性

如果只想遍历对象本身的属性,可以使用hasOwnProperty方法:

with语句

它的作用是操作同一个对象的多个属性时。

with区块内部的变量,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

数值

两个字符串进行比较时,按照字典顺序进行比较。 JavaScript引擎内部首先比较首字符的Unicode编号,如果相等,再比较第二个字符的Unicode编号,以此类推。

小写的c的Unicode编号(99)大于大写的C的Unicode编号(67)。

同一类的复合类型值

两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。

严格相等运算比较的是它们的内存地址是否一样,而上面代码中空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false。

相等运算符

  • 原始类型的值

    • 原始类型的数据会转换成数值类型再进行比较。

  • 对象与原始类型值比较

    • 对象(这里指广义的对象,包括数值和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。

上面代码将只含有数值1的数组与原始类型的值进行比较,数组[1]会被自动转换成数值1,因此结果都是true。

  • undefined和null

    • undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。

  • 相等运算符的缺点

    • 相等运算符隐藏的类型转换,会带来一些违反直觉的结果。

布尔运算符

取反运算符形式上是一个感叹号,用于将布尔值变为相反值。

以下六个值取反后为true:

且运算符(&&)

如果第一个运算子的布尔值为true,则返回第二个运算子的值(注意是值,不是布尔值);如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。

且运算符可以多个连用,这时返回第一个布尔值为false的表达式的值。

或运算符(||)

如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false,则返回第二个运算子的值。

或运算符可以多个连用,这时返回第一个布尔值为true的表达式的值。

三元条件运算符( ? :)

三元条件运算符用问号(?)和冒号(:),分隔三个表达式。如果第一个表达式的布尔值为true,则返回第二个表达式的值,否则返回第三个表达式的值。

位运算

http://javascript.ruanyifeng.com/grammar/operator.html#toc14

圆括号运算符

圆括号是一种运算符,它有两种用法:如果把表达式放在圆括号之中,作用是求值;如果跟在函数的后面,作用是调用函数。

对象放在圆括号之中,则会返回对象的值,即对象本身。

void运算符

void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined。

void运算符的优先性很高

逗号运算符

逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

运算顺序

赋值运算符(=)和三元条件运算符(?:)是少数运算符的计算顺序是从右到左。

下表按从最高到最低的优先级列出JavaScript运算符。

运算符

描述

. [] ()

字段访问、数组下标、函数调用以及表达式分组

++ -- - ~ ! delete new typeof void

一元运算符、返回数据类型、对象创建、未定义值

* / %

乘法、除法、取模

+ - +

加法、减法、字符串连接

<< >> >>>

移位

< <= > >= instanceof

小于、小于等于、大于、大于等于、instanceof

== != === !==

等于、不等于、严格相等、非严格相等

&

按位与

^

按位异或

|

按位或

&&

逻辑与

||

逻辑或

?:

条件

= oP=

赋值、运算赋值

,

多重求值

Last updated

Was this helpful?