《javascript语言精髓与编程实践》——javascript运算符语义的二义性

1.  +  

    ⑴ 表示字符串连接;一个表达式中如果存在字符串,则优先按照字符串连接来进行运算  (原生javascript)

    (2) 表示数字取正的一元运算符;  如+5,这是一个表达式,其中+是运算符,5是运算元;

    (3) 表示数值的求和运算;

2.  ()

   (1)语句的词法元素

   (2)作为“传值参数表”

   (3)用于强制表达式运算

3. :

  (1)声明直接量对象的成员和声明标签

  (2)在switch语句中声明一个分支

  (3)在三元表达式中作为一个运算符

4. {}

  (1)表示复合语句

  (2)声明对象直接量

  (3)函数直接量声明时的语法符号

  (4)结构化异常处理的语法符号

 5. ,

  (1).可以作为连续运算符使用     a=(1,2,3)  返回3   b=1,2,3  返回的是3,在b赋值为1后。会继续运算后面的,可以用console.log(b=1,2,3)  //输出为1 2 3

  (2)数组(或变量)声明时的语法分隔符 

 6. []

 (1).声明数组的直接量

 (2).当作存取数组下标运算符  

  a=[[1][1]]  得到一个[undefined]  原因如下:

    第一个[1]作为一个数组直接量,第二个[1]作为存取数组的下标的运算符。因为[1]只有一个元素。因此[1][1]为undefined  所以会得到[undefined]

 b=[[1,2,3][2]]   //[3]

 c=[[][]]   //报错,因为第二个作为存取数组的下标运算符,索引值不能为空

 (3)当作存取对象的下标运算符

   

var table =[

['a',1,2,3]   //此处漏掉一个逗号

['b',4,5],

['c',6,7]

]
上面的
['a',1,2,3]被解析成一个数组,而['b',4,5]被解析成一个存取数组的下标运算符,因为 ','被当成是连续运算符,因此['b',4,5] => [5]
因此变成
var table =[

['a',1,2,3][5],

['c',6,7]

]
==> var tabel=[undefined,['c',6,7]]

同理:  =======>

var table = [

['a',1,2]

['b',0,1],

['c',3,4]

]

===>   table = [0,['c',3,4]]









var table = [

['a','b','c']

[1,2],

[4,5,6]

]

====> tabel = ['c',[4,5,6]]



var table = [

['a','b','c']

[1,'length'],

[4,5,6]

]

====> tabel = [3,[4,5,6]]    --->理解为取属性'length'

 

 

 

你可能感兴趣的:(JavaScript)