数据类型
JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值)
- 数值(number):整数和小数(比如1和3.14)
字符串(string):字符组成的文本(比如"Hello World") - 布尔值(boolean):true(真)和false(假)两个特定值
- undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
- null:表示无值,即此处的值就是“无”的状态。
- 对象(object):各种值组成的集合
- Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是唯一且不可改变的。
typeof运算符
typeof运算符可以返回一个值的数据类型。
1、原始类型
数值、字符串、布尔值分别返回number、string、boolean。
typeof 134 //"number"
typeof '你好'//"string"
typeof false//"boolean"
2、函数
函数返回function。
function a() {}
typeof a //"function"
3、undefined
undefined返回undefined
typeof undefined //"undefined"
利用这一点,typeof可以用来检查一个没有声明的变量,而不报错。
4、其他
typeof window //"object"
typeof [] //"object"
typeof {} //"object"
typeof null //"object"
5、布尔值
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
下列运算符会返回布尔值:
两元逻辑运算符:&&
(And),||
(Or)
前置逻辑运算符: !
(Not)
相等运算符:===
,!==
,==
,!=
比较运算符:>
,>=
,<
,<=
如果JavaScript预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
-
""
或''
(空字符串)
布尔值往往用于程序流程的控制 如:
if ('') {
console.log(true);// 没有输出
}
上面代码的if命令后面的判断条件,预期应该是一个布尔值,所以JavaScript自动将空字符串转为布尔值false,导致程序不会进入代码块,所以没有任何输出。
空数组([]
)和空对象({}
)对应的布尔值,都是true
if ([]) {
console.log(true); //true
}
if ({}) {
console.log(true);//true
}
运算符
1、算数运算符
- 加法运算符(Addition):x + y
- 减法运算符(Subtraction): x - y
- 乘法运算符(Multiplication): x * y
- 除法运算符(Division):x / y
- 余数运算符(Remainder):x % y
- 自增运算符(Increment):++x 或者 x++
- 自减运算符(Decrement):--x 或者 x--
- 求负运算符(Negate):-x
- 数值运算符(Convert to number): +x
2、赋值运算符
- x += y // 等同于 x = x + y
- x -= y // 等同于 x = x - y
- x *= y // 等同于 x = x * y
- x /= y // 等同于 x = x / y
- x %= y // 等同于 x = x % y
- x >>= y // 等同于 x = x >> y
- x <<= y // 等同于 x = x << y
- x >>>= y // 等同于 x = x >>> y
- x &= y // 等同于 x = x & y
- x |= y // 等同于 x = x | y
- x ^= y // 等同于 x = x ^ y
3、比较运算符
比较运算符比较两个值,然后返回一个布尔值,表示是否满足比较条件。
- == 相等
- === 严格相等
- != 不相等
- !== 严格不相等
- < 小于
- <= 小于或等于
- > 大于
- >= 大于或等于
4、布尔运算符
- ! 取反运算符
- && 且运算符
- || 或运算符
- condition? true case : false case 三元条件运算符
5、位运算符
- 或运算(or):符号为|,表示两个二进制位中有一个为1,则结果为1,否则为0。
- 与运算(and):符号为&,表示两个二进制位都为1,则结果为1,否则为0。
- 否运算(not):符号为~,表示将一个二进制位变成相反值。
- 异或运算(xor):符号为ˆ,表示两个二进制位中有且仅有一个为1时,结果为1,否则为0。
- 左移运算(left shift):符号为<<
- 右移运算(right shift):符号为>>
- 带符号位的右移运算 (zero filled right shift):符号为>>>
6、汇总表
优先级 | 运算类型 | 关联性 | 运算符 |
---|---|---|---|
20 | 圆括号 | n/a | ( … ) |
19 | 成员访问 | 从左到右 | … . … |
19 | 需计算的成员访问 | 从左到右 | … [ … ] |
19 | new (带参数列表) | n/a | new … ( … ) |
19 | 函数调用 | 从左到右 | … ( … ) |
18 | new (无参数列表) | 从右到左 | new … |
17 | 后置递增(运算符在后) | n/a | … ++ |
17 | 后置递减(运算符在后) | n/a | … -- |
16 | 逻辑非 | 从右到左 | ! … |
16 | 按位非 | 从右到左 | ~ … |
16 | 一元加法 | 从右到左 | + … |
16 | 一元减法 | 从右到左 | - … |
16 | 前置递增 | 从右到左 | ++ … |
16 | 前置递减 | 从右到左 | -- … |
16 | typeof | 从右到左 | typeof … |
16 | void | 从右到左 | void … |
16 | delete | 从右到左 | delete … |
15 | 幂 | 从右到左 | … ** … |
14 | 乘法 | 从左到右 | … * … |
14 | 除法 | 从左到右 | … / … |
14 | 取模 | 从左到右 | … % … |
13 | 加法 | 从左到右 | … + … |
13 | 减法 | 从左到右 | … - … |
12 | 按位左移 | 从左到右 | … << … |
12 | 按位右移 | 从左到右 | … >> … |
12 | 无符号右移 | 从左到右 | … >>> … |
11 | 小于 | 从左到右 | … < … |
11 | 小于等于 | 从左到右 | … <= … |
11 | 大于 | 从左到右 | … > … |
11 | 大于等于 | 从左到右 | … >= … |
11 | in | 从左到右 | … in … |
11 | instanceof | 从左到右 | … instanceof … |
10 | 等号 | 从左到右 | … == … |
10 | 非等号 | 从左到右 | … != … |
10 | 全等号 | 从左到右 | … === … |
10 | 非全等号 | 从左到右 | … !== … |
9 | 按位与 | 从左到右 | … & … |
8 | 按位异或 | 从左到右 | … ^ … |
7 | 按位或 | 从左到右 | … | … |
6 | 逻辑与 | 从左到右 | … && … |
5 | 逻辑或 | 从左到右 | … || … |
4 | 条件运算符 | 从右到左 | … ? … : … |
3 | 赋值 | 从右到左 | … = … |
3 | 从右到左 | … += … | |
3 | 从右到左 | … -= … | |
3 | 从右到左 | … *= … | |
3 | 从右到左 | … /= … | |
3 | 从右到左 | … %= … | |
3 | 从右到左 | … <<= … | |
3 | 从右到左 | … >>= … | |
3 | 从右到左 | … >>>= … | |
3 | 从右到左 | … &= … | |
3 | 从右到左 | … ^= … | |
3 | 从右到左 | … |= … | |
2 | yield | 从右到左 | yield … |
yield* | 从右到左 | yield* … | |
1 | 展开运算符 | n/a | ... … |
0 | 逗号 | 从左到右 | … , … |
ps:Undefined、Null、 +0、 −0、 NaN、空字符串为 false