Number
, 数字,包括浮点数、在 ±(253-1) 范围内的整数;Bigint
, 任意长度的整数;String
, 字符串,一个字符串可以包含 0 个或多个字符,没有单字符类型;Boolean
, true
和 false
;Null
,空值,是一个独立类型,只有一个值;Undefined
,未定义的值,也是一个独立类型,也只有一个值;Symbol
,唯一的标识符。object
,用于更复杂的数据结构,包括:
Array
,数组;Function
,函数;Date
,日期;Object
等,这些类型在 typeof
函数验证时,都返回字符串 ‘object’。声明变量时,可以同时对变量的数据类型进行声明,使用关键字new;
typeof null 的结果是 ‘object’,尽管 null 是值类型。
let num = new Number(555);
let s = new String;
s = "hello"
typeof(null) // 'object'
typeof null // 'object'
IEEE-754
存储,也被称为双精度浮点数
。这里不包括大数(BigInt等)。let ob = 1000000000 // 10亿
let ob2 = 2e9
let ob3 = 3e-6
let ob4 = 4_000_000_000 // 40亿
Infinity
、-Infinity
是特殊数值,表示正无穷和负无穷(大数字),通过 isFinite(value)
判断;NaN
,即 Not A Number,一般表示错误的计算得到的结果,通过 isNaN(value)
判断。let inf = -1 / 0 // -Infinity
isFinite(inf) // true
let n = 'x' / 1 // NaN
isNaN(n) // true
NaN * 0 // 0
NaN === NaN // false
对于表达式的运算,必须清楚运算法则和运算符:
+
作为一元运算符时,基本作用:不是数值的操作数 -> 数值,如 +'12'
结果是数值12;+
作为二元运算符时,遇到字符串:字符串拼接,如 '你'+'好'
结果是字符串"你好"。可以看到,+
是很特别的运算符,且因为优先级的存在,这决定了字符串的运算特性:
+
),再进行运算,换句话说,其他算术运算符会将值转换为数字;1
、-0.25
、+213
等是能够正常转换,但是如x
、hello
等转换成NaN
。下面是一些实例与注解:
/* 运算法则 */
1 + 2 * 3 / (10 - 8) // 4
/* + 作为一元运算符 */
+'12' // 12 - 数值
+'hi' // NaN - 特别的数
1 + +'12' // 13 - 数值,第一个加号起加运算的作用
/* + 作为二元运算符 */
1 + '12' // '112' - 字符串
'1' + 12 // '112' - 字符串
'1' + '12' // '112' - 字符串
/* 其他运算符与字符串计算 */
'12' / 3 // 4 - 数值
'3' * 2 // 6 - 数值
'3' - 1 // 2 - 数值
'3' - '2' // 1 - 数值
1 + '12' - 1 // 111 - 数值
'12' - 2 + '2' // '102' - 字符串
'12' * 'xyz' // NaN - 特别的数
在这一部分中,绝大多数情况下遵循 false->0
、true->1
。
1 / false // infinity 无穷大
1 + true // 2
false + true // 1
false + 1 + true // 2
let b = 0b101 // 5
let o = 0o17 // 15
let h = 0x11 // 17
let s1 = 'Hello'; // 单引号
let s2 = "World"; // 双引号
// 反引号
let phrase = `${s1}:
My name is Li Ming,
1+1=${1+1}!`;
\
本身就是一个特殊字符;\n | 换行 |
\r | 在 Windows 文本文件中,两个字符 \r\n 的组合代表一个换行。而在非 Windows 操作系统上,它就是 \n 。这是历史原因造成的,大多数的 Windows 软件也理解 \n 。 |
\' , \" | 引号 |
\\ | 反斜线 |
\t | 制表符 |
\b , \f , \v | 退格,换页,垂直标签 —— 为了兼容性,现在已经不使用了。 |
\xXX | 具有给定十六进制 Unicode XX 的 Unicode 字符,例如:'\x7A' 和 'z' 相同。 |
\uXXXX | 以 UTF-16 编码的十六进制代码 XXXX 的 Unicode 字符,例如 \u00A9 —— 是版权符号 ? 的 Unicode。它必须正好是 4 个十六进制数字。 |
\u{X…XXXXXX} (1 到 6 个十六进制字符) | 具有给定 UTF-32 编码的 Unicode 符号。一些罕见的字符用两个 Unicode 符号编码,占用 4 个字节。这样我们就可以插入长代码了。 |
true
,逻辑是;false
,逻辑否。null
和空指针是不同的概念;let x = null // 表示 x 的值是未知的
undefined
表示未被赋值;let x;
console.log(x) // undefined
x = 10
console.log(x) // 10
一些属性和值一一对应、方法和对应函数体的集合称为对象。
// 一个基本对象的定义
let o = { 'age': 18,
'name': 'Li Ming',
'habit': 'fishing',
// 下面是一个方法:打盹时间 = 开工时间 + 2小时
napTime: function(workBeginTime){ return workBeginTime + 2 } }
// 数组
const arr = [1, 2, 3]
arr // 在控制台,查看数组的原型对象的属性、方法和相应的值
// 函数
function f(n) { const pi = 3.14; return pi * n; }
f.prototype // 在控制台,查看函数的原型对象的属性、方法和相应的值