1. JS是弱类型语言,在运算符使用上更加灵活
- 包括算术运算符、关系运算符、等于运算符、位运算符
2. 等于运算符
在Java、C等强类型语言中,一个变量在使用前必须声明变量类型,所以在比较时无需判断变量类型,只需要有双等于==即可。
JS是弱类型语言,一个变量可声明为任何类型的值。
- 双等于比较:会将两端的变量进行隐式类型转换,然后比较值的大小
- 三等于比较:优先比较数据类型,再判断值的大小
2.1 JS中的三等于运算符
-
基本数据类型存在包装类型,注意基本数据类型和引用数据类型的区别
-
引用类型比较的是引用类型的地址
2.2 JS中的双等于运算符
-
在比较时不同的数据类型,会进行隐式类型转换
-
null == undefined
-
字符串(转换数值) == 数值
-
Boolean类型(转换数值) == 数值 == 字符串(转换数值)
-
对象类型(用valueOf()和toString()转换为基本数据类型) == 基本数据类型
-
3. typeof运算符
3.1 用于返回操作数的数据类型
- 操作数可以是基本数据类型,也可以是引用类型
- 括号是必须的,避免优先级问题
3.2 在不同数据类型中的处理结果
数据类型 | 处理对象 |
---|---|
typeof x === 'undefined' | undefined本身、未声明变量、已声明未初始化变量 |
typeof x === 'boolean' | true、false、两个包装类型Boolean(true) |
typeof x === 'number' | 数字、Number类型静态变量、Number类型静态变量值、 NaN、无穷大、无穷小、数值类型包装类型 |
typeof x === 'string' | 字符串、返回值为字符串类型的表达式、包装类型 |
typeof x === 'symbol' | Symbol类型 |
typeof x === 'function' | 两种定义后的函数、class关键字定义的类、 某些内置对象的特定函数、Function类型对象的实例 |
typeof x === 'object' | 对象字面量、数组、通过new操作符实例化后的对象(除Function)、null、 通过new操作符得到的基本数据类型的包装类型对象(new Boolean(true)) |
typeof区分对待Object类型和Function类型
typeof处理null返回“object”
括号的必要性
4. 逗号运算符
- 逗号运算符是基本的分隔符
- 逗号运算符可作为运算符,将多个表达式连接起来,从左至右依次执行
- 逗号运算符在特定场景下的应用
-
在for循环中批量执行表达式
-
用于交换变量,无需额外变量
-
用于简化代码
-
用小括号保证逗号运算符的优先级
-
5. 运算符优先级
优先级最高的先执行,优先级最低的最后执行。
建议使用小括号,以保证运算顺序清晰可读。