JavaScript数据类型
Number 数字类型
number 类型表示整数和浮点数,取值范围 ±(253-1)
除了常规的数字,还包括所谓的“特殊数值(“special numeric values”)”也属于这种类型:Infinity、-Infinity 和 NaN
- -Infinity 无穷小
- Infinity 无穷大 ∞
alert(1/0); // Infinity
- 非数字 NaN (如果在数学表达式中有一个NaN, 会被传播到最终结果)
alert("str" / 1 + 2); // NaN
BigInt 类型
bigInt 类型是JavaScript 语言中第八种数据类型(IE 浏览器不支持)用于表示任意长度的整数,可超出number取值范围
通过将 n 附加到整数字段的末尾来创建 BigInt 值
// 尾部的 "n" 表示这是一个 BigInt 类型
const bigInt = 1234567890123456789012345678901234567890n;
String 字符串类型
三种包含字符串的方式
- 双引号:“str”
- 单引号:‘str’
- 反引号:`str`
双引号和单引号都是“简单”引用,在 JavaScript 中两者几乎没有差别
将变量嵌入到字符串里面:
let age = 18;
alert("我今年" + age + "岁了!"); // 我今年18岁了!
反引号是 功能扩展 引号,可以将变量和表达式包装在 ${…} 中,嵌入到字符串里面
let name = "wayne";
// 嵌入一个变量
alert(`Hello,${name}!`); // Hello,wayne!
// 嵌入一个表达式
alert(`get${50+50}RMB`); // get100RMB
// &{...}嵌入 只在反引号内有效
alert("Hello,${name}!"); // Hello,${name}!
Boolean 布尔类型(逻辑类型)
boolean 类型只有两个值:true 和 false
通常用于存储表示 yes 或 no 的值:true 意味着 “yes,正确”,false 意味着 “no,不正确”
布尔值也可作为比较的结果
let s = 3 > 1;
alert(s); // true
null
特殊的 null 值不属于上述任何一种类型
它构成了一个独立的类型,只包含 null 值:
let s = null;
alert(s); // null
相比较于其他编程语言,JavaScript 中的 null 不是一个“对不存在的 object 的引用”或者 “null 指针”。
JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值。
上面的代码表示 s 是未知的
JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值。
undefined
特殊值 undefined 和 null 一样自成类型
undefined 的含义是 未被赋值
如果一个变量已被声明,但未被赋值,那么它的值就是 undefined:
let s;
alert(s); // "undefined"
从技术上讲,可以显式地将 undefined 赋值给变量:
let s = 1;
// 将值修改为 undefined
s = undefined;
alert(s); // undefined
但是不建议这样做。通常使用 null 将一个“空”或者“未知”的值写入变量中,而 undefined 则保留作为未进行初始化的事物的默认初始值
Object 类型
object 类型是一个特殊的类型
其他所有的数据类型都被称为“原始类型”,因为它们的值只包含一个单独的内容(字符串、数字或者其他)object 则用于储存数据集合和更复杂的实体
// array 数组
let s = [1,2,3];
// object 对象
let s = {name: 'wayne', age: 18};
// function 函数
let s = function fn(a,b) {
return a+b;
};
Symbol 类型
Symbol 类型(ES6新增)是JavaScript 语言中第七种数据类型,用于创建对象的唯一标识符
let s = Symbol("id");
这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题
typeof 运算符
typeof 运算符返回参数的类型
支持两种语法形式:
- 作为运算符:typeof x
- 函数形式:typeof(x)
有括号和没有括号,得到的结果是一样的
对 typeof x 的调用会以字符串的形式返回数据类型:
typeof undifined // undefined
typeof 0 // number
typeof 10n // bigint
typeof true // boolean
typeof "str" // string
typeof Symbol("id") // symbol
typeof Math // object (1)
typeof null // boject (2)
typeof alert // function (3)
(1) Math 是一个提供数学运算的内置 object
(2) typeof null 的结果是 “object”。这是官方承认的 typeof 的行为上的错误,这个问题来自于 JavaScript 语言的早期,并为了兼容性而保留了下来。null 绝对不是一个 object。null 有自己的类型,它是一个特殊值
(3) 函数隶属于 object 类型。但是 typeof 会对函数区分对待,并返回 “function”。这也是来自于 JavaScript 语言早期的问题。从技术上讲,这种行为是不正确的,但在实际编程中却非常方便
总结
JavaScript 中有八种数据类型(object 为复杂数据类型)
- number 用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数
- bigint 用于任意长度的整数
- string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
- boolean 用于 true 和 false
- null 用于未知的值 —— 只有一个 null 值的独立类型
- undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型
- symbol 用于唯一的标识符
- object 用于更复杂的数据结构
可以通过 typeof 运算符查看存储在变量中的数据类型
- 两种形式:typeof x 或者 typeof(x)
- 以字符串的形式返回类型名称
- typeof null 会返回 “object” —— 这是 JavaScript 编程语言的一个错误,实际上它并不是一个 object