图片来源于:https://pixabay.com/zh/photos/maple-leaf-book-reading-dear-diary-638022/
JS的两大数据类型
官方定义的名称:
- 原始值类型
- 对象数据类型
原始值类型俗称:简单数据类型、基本数据类型
对象数据类型俗称:复杂数据类型、引用数据类型
原始值类型
- Number
- String
- Boolean
- null
- undefined
- Symbol
- bigint
Number类型
- 成员有 数字、NaN、Infinity、-Infinity
- NaN:率属于Number类型,但不是一个有效的数字
- Infinity / -Infinity 代表 正无穷 | 负无穷
Number特殊的地方
- 我们比较是否为有效数字的时候不应该拿 NaN 和 数字 比较
/* NaN 不等于 NaN */
console.log(NaN === NaN); //=> false
/* NaN 不等于任何数字 */
console.log(NaN === 1); //=> false
console.log(NaN === Infinity) // false
- 我们想要查看一个数字是否为有效数字时应该使用 isNaN
/* isNaN 方法是一个js内置函数 */
isNaN(NaN) //=> true
isNaN(1) //=> false
isNaN(Infinity) //=> false
Number类型的总结
- NaN 不等于 NaN,所以判断是否为有效数字时我们应该使用 isNaN,而不是比较是否相等
- isNaN 当不是一个有效数字才会返回 true, 有效数字返回 false
String类型
- 所有用 单引号 、双引号、反引号 起来的都叫字符串
- 反引号包裹着的字符串也叫模板字符串是ES6的语法
/* 单引号 '' */
var str1 = '这是一段字符串';
/* 双引号 "" */
var str2 = "这是一段字符串";
/* 反引号 `` */
var str3 = `这是一段字符串`;
注意
- 双引号不能包裹双引号,单引号不能包裹单引号,反引号不能包裹反引号。但是它们可以互相包裹
- 如果需要将两个字符链接起来需要用连接符 (+)
/* 将字符串连接起来 */
var str1 = '连接' + '字符';
/* 符号互相包裹 */
var str2 = `'粽' 情 '粽' 意`;
字符串的总结
- 无论内容是什么,只要单引号、双引号、反引号包裹着的都是字符串
- 同符号不允许被包裹
Boolean类型
- Boolean类型只有 true 和 false 两个值
- 只有当一个值为:空字符串、空数组、数字零、null、undefined的时候才会为false,没有其他特殊情况
null 和 undefined 类型
- null:表示这个结果是我们意料之中的
- undefined:表示这个结果是我们意料之外的
- null和undefined都是代表空的意思
例子:
/* 获取页面的HTML(根)标签的父亲节点 意料之中 */
var html = document.documentElement.parentNode;
console.log(html) //=> 结果null,因为语法知道根标签是没有父亲节点的,意料之中
/* 获取对象一个不存在的属性 意料之外 */
var obj = { name: 'obj' };
console.log(obj['age']); //=> 结果undefined,因为语法不知道obj里面有age这个属性当它去获取的时候发现这个属性压根不存在 意料之外,所以是undefined
null和undefined的总结
当去获取一个不知道且不存在的属性时就是 undefined
当去获取一个知道但为空的属性时就是 null
Symbol类型
- ES6语法新增
- 用Symbol声明出来的值,是唯一的值
例子:
/* 声明两个Symbol值 比较是否相等 */
console.log(Symbol('A') === Symbol('A')); // 结果为false,因为它们两个只是标识相同,但是值都是唯一的,所以为false
/* 获取对象中以Symbol值为键名的属性 */
var sy = Symbol('A');
var obj = {
[sy]: 'symbolA',
[Symbol('B')]: 'symbolB'
};
console.log(obj[Symbol('B')]); //=> undefined,只是标识相同,obj里面属性名为Symbol('B')值是不同的
console.log(obj[sy]); //=> symbolA,跟obj引用的是同一个变量所以就可以获取到值
Symbol类型总结
- Symbol(‘A’) 只是将 ‘A’ 作为一个标识,但是其值仍然是唯一的
- 如果想要获取相同的结果,需要使用变量将值暂存起来。否则获取不到
BigInt类型
- ES6语法新增
- BigInt类型 在运算超大数字的时候可以保证精确度
- 数字后面加个n就表示这个数字是一个BigInt类型
/* 转成BigInt数据类型 */
console.log(BigInt(100)); //=> 100n
/* BinInt数据类型转换成Number类型 */
console.log(Number(9123452334564571n.toString())); //=> 9123452334564571
BigInt类型总结
- 数字后面加n的代表是一个BinInt类型
- 运算超出安全数的时候,需要使用BigInt类型,否则会出现精度不正确
- BitInt类型反转Number类型,需要先转换成字符串,再转成数字
对象数据类型
- 标准普通对象
- 标准特殊对象
- 非标准特殊对象
- 可调用/执行对象
标准普通对象
- 由0 到 多组键值对组成 => { 键名:键值 }
例子:
/* 定义普通标准对象 */
var obj = { name: 'obj' };
标准特殊对象
- JS中的内置类
- 数组、日期、错误
例子:
/* 内置日期对象*/
console.dir(Date); //=>使用dir打印详情,而不是log
非标准特殊对象
- 基于原始值类型,原始值的类型基于构造函数 new 出来的实例
/* new 一个非标准特殊对象 */
console.log(new Number(1)); //=> Number {1}
可执行/调用的对象
- 函数对象 function
- 函数是一个特殊的对象
结尾
尊敬的读者,谢谢您坚持看到最后。希望您可以在我的文章中学到一些知识。如果文章中有什么错误的地方,欢迎在评论区或者私信我改正,谢谢您!