基本数据类型包括:Number、String、Boolean、Null、Undefined、Symbol。(栈)
引用数据类型包括:Object、Array、Function。(堆)
一、基本数据类型
基本数据类型主要存放在栈内存中。基本数据类型变量赋值给另一个变量时,会在栈中重新分配一块内存空间。
1.1 Number
NaN、0、1、2... 等 NaN 属性用于引用特殊的非数字值。NaN不是常量,可以把它设置为其他值。NaN 与所有值都不相等,包括它自己。所有用 isNaN() 来判断。JSON.stringify(NaN)返回的是 null。 在 if 判断中 0 和 NaN 为 false,其他为 true。 Number() 可以将类数字字符串转化成 Number 类型,否则为 NaN。
1.2 String
在 if 判断中 '' 为 false,其他为 true。 String 操作方法
| 方法 | 用法 |
|---|---|
| length | 为字符串的长度。 |
| charAt() | 返回在指定位置的字符。 |
| concat() | 连接字符串。 |
| indexOf() | 检索字符串。 |
| lastIndexOf() | 从后向前搜索字符串。 |
| slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分。 |
| search() | 检索与正则表达式相匹配的值。 |
| split() | 把字符串分割为字符串数组。 |
| substr() | 从起始索引号提取字符串中指定数目的字符。 |
| substring() | 提取字符串中两个指定的索引号之间的字符。 |
| toString() | 返回字符串。 |
| valueOf() | 返回某个字符串对象的原始值。 |
| toLocaleLowerCase() | 把字符串转换为小写。 |
| toLocaleUpperCase() | 把字符串转换为大写。 |
| toLowerCase() | 把字符串转换为小写。 |
| toUpperCase() | 把字符串转换为大写。 |
| replace() | 替换与正则表达式匹配的子串。 |
1.3 Boolean
主要 true 和 false,Boolean() 可以将其他类型进行转化。 Boolean('')、Boolean(0)、Boolean(NaN)、Boolean(undefined)、Boolean(null) 为 false,其他为 true。 toString() 把逻辑值转换为字符串,并返回结果'false'和'true'。
1.4 Null
typeof null 返回的是 'object'。(浏览器本身的bug)
1.5 Undefined
typeof undefined 返回的是 'undefined'。(浏览器本身的bug)
1.6 Symbol
typeof Symbol() 返回的是 'symbol'。Symbol本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。 1)Symbol数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 == id2); //false
2)Symbol 数据类型的另一特点是隐藏性,for···in,object.keys()不能访问。 3)Object.getOwnPropertySymbols 方法会返回一个数组。 4)Symbol.for() 多次使用同一个symbol值。
let name1 = Symbol.for('name'); //检测到未创建后新建
let name2 = Symbol.for('name'); //检测到已创建后返回
console.log(name1 === name2); // true
二、引用数据类型
复杂数据类型索引存放在栈内存中,对象存在于堆内存中。引用数据类型变量赋值给另一个变量时,索引只是指向相同的堆内存空间。拷贝分为浅拷贝和深度拷贝。
2.1 Object
Object 主要遍历方法有,for in 和 Object.keys() 用 Object.defineProperty 第一方法。 Object.prototype.protoPer1 通过原型链增加属性,为一个函数。 Object.keys主要用于遍历对象自有的可枚举属性,不包括继承自原型的属性和不可枚举的属性。
2.1.1 for in
主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性,(Object.prototype.jinhua),就会遍历到 jinhua。
2.1.1 Object.keys()
Object.keys() 会返回对象的,键值的数组。