zoukankan      html  css  js  c++  java
  • 《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'
  • 相关阅读:
    linux基础命令笔记
    linux日常常用命令分析
    43.QQ聊天软件GUI窗口编写
    42.线程概念及线程池
    pycham中报:ModuleNotFoundError: No module named 'pymysql'
    python os模块
    python用类的方式创建线程---自创建类
    python server端并发聊天
    python文件上传
    python编码--解码
  • 原文地址:https://www.cnblogs.com/fsy0718/p/3069513.html
Copyright © 2011-2022 走看看