js:语言精髓笔记2--表达式
表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;(表达式是有返回值的)
单值表达式:
- this引用;
- 变量引用;
- 直接量:
- null
- undefined
- 字符串
- 布尔值
- 数值
- 正则表达式
基本表达式:
- 单值表达式
- 数组初始器:[]
- 对象初始器:{}
- 表达式分组运算:()
运算符按结果值的分类:
- 一般表达式运算:(会强制类型转换)
- 数值运算 //运算元:number ; 目标类型: number;
- 位运算 //运算元:number ; 目标类型: number;
- 布尔值运算(! && ||) //运算元:boolean; 目标类型: boolean;
- 值逻辑运算:(将运算元理解为布尔值,但不强制类型转换)(&& ||) //运算元: 运算元 ; 目标类型: 运算元;
- 字符串运算
- 字符串连接:效果与concat()相同; //运算元:string; 目标类型: string;
- 等值运算:(三种值类型中对字符串检测开销很大) //运算元:*; 目标类型: boolean; 赋值运算:
- 一般赋值; //运算元:*; 目标类型: *;
- 复合赋值;(除了 += 之外都不可对字符串运算) //运算元:*; 目标类型: *;
- 一般function函数调用;
- Function类创建的函数对象调用;
- 对象:创建,存取,检查等; //运算元:object; 目标类型: *;
- 其他
序列检测(等值运算中):
- 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
- 检测规则:(按数值比较优先原则)
- 两个值类型比较:比较序列中大小;
- 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
- 两个引用类型比较:无意义,总是返回false;因为找不到序列;
赋值运算:赋值的效果就是修改存储单元中的值;
- 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误; 特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生
- 不能直接修改字符串字符;
- 字符串连接运算会产生新的字符串;
- 修改length无意义;
特殊运算符:
- 不直接产生运算效果而是影响运算效果:
- void 使表达式总是返回undefined;
- ? :
- () 调整运算次序,优先级运算
- , 表达式顺序地连续执行
- 不直接针对变量的值运算而是针对变量运算:
- typeof 并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
- instanceof 返回继承关系;
- in 返回成员关系;
- delete 删除成员;
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步