首页 > 代码库 > js:语言精髓笔记2--表达式

js:语言精髓笔记2--表达式

单词形式运算符:typeof,in,void,instanceof,new,delete。

表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;

单值表达式:

  • this引用;
  • 变量引用;
  • 直接量:
    • null
    • undefined
    • 字符串
    • 布尔值
    • 数值
    • 正则表达式

基本表达式:

  • 单值表达式
  • 数组初始器:[]
  • 对象初始器:{}
  • 表达式分组运算:()

 运算符按结果值的分类:

  • 一般表达式运算:(会强制类型转换)
    • 数值运算
    • 位运算
    • 布尔值运算(! && ||)
  • 值逻辑运算:(将运算原理解为布尔值,但不强制类型转换)(&& ||)
  • 字符串运算
    • 字符串连接:效果与concat()相同;
  • 等值运算:(三种值类型中对字符串检测开销很大)
  • 赋值运算:
    • 一般赋值;
    • 复合赋值;(除了 += 之外都不可对字符串运算)
  • 函数调用:使用小括号,传参并执行;
    • 一般function函数调用;
    • Function类创建的函数对象调用;
  • 对象:创建,存取,检查等;
  • 其他

序列检测(等值运算中):

  • 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
  • 检测规则:(按数值比较优先原则)
    • 两个值类型比较:比较序列中大小;
    • 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
    • 两个引用类型比较:无意义,总是返回false;因为找不到序列;

赋值运算:赋值的效果就是修改存储单元中的值;

    • 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误;
    • 特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生
      • 不能直接修改字符串字符;
      • 字符串连接运算会产生新的字符串;
      • 修改length无意义;

 特殊运算符:

  • 不直接产生运算效果而是影响运算效果:
    • void:使表达式总是返回undefined;
    • ? :
    • () :调整运算次序,优先级运算
    • ,:表达式顺序地连续执行
  • 不直接针对变量的值运算而是针对变量运算:
    • typeof:并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
    • instanceof:返回继承关系;
    • in:返回成员关系;
    • delete:删除成员;

js:语言精髓笔记2--表达式