单词形式运算符:typeof,in,void,instanceof,new,delete。
表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;
单值表达式:
- this引用;
- 变量引用;
- 直接量:
- null
- undefined
- 字符串
- 布尔值
- 数值
- 正则表达式
基本表达式:
- 单值表达式
- 数组初始器:[]
- 对象初始器:{}
- 表达式分组运算:()
运算符按结果值的分类:
- 一般表达式运算:(会强制类型转换)
- 数值运算
- 位运算
- 布尔值运算(! && ||)
- 值逻辑运算:(将运算原理解为布尔值,但不强制类型转换)(&& ||)
- 字符串运算
- 字符串连接:效果与concat()相同;
- 等值运算:(三种值类型中对字符串检测开销很大)
- 赋值运算:
- 一般赋值;
- 复合赋值;(除了 += 之外都不可对字符串运算)
- 函数调用:使用小括号,传参并执行;
- 一般function函数调用;
- Function类创建的函数对象调用;
- 对象:创建,存取,检查等;
- 其他
序列检测(等值运算中):
- 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
- 检测规则:(按数值比较优先原则)
- 两个值类型比较:比较序列中大小;
- 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
- 两个引用类型比较:无意义,总是返回false;因为找不到序列;
赋值运算:赋值的效果就是修改存储单元中的值;
- 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误;
- 不能直接修改字符串字符;
- 字符串连接运算会产生新的字符串;
- 修改length无意义;
特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生
特殊运算符:
- 不直接产生运算效果而是影响运算效果:
- void:使表达式总是返回undefined;
- ? :
- () :调整运算次序,优先级运算
- ,:表达式顺序地连续执行
- 不直接针对变量的值运算而是针对变量运算:
- typeof:并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
- instanceof:返回继承关系;
- in:返回成员关系;
- delete:删除成员;
时间: 2024-10-31 15:57:03