到目前为止,共7种数据类型:
Null,Undefined,布尔值(Boolean),字符串(String),数值(Number),(独一无二)Symbol,对象(Object)
归纳可以划分两种
基本数据类型:【按值访问,定义了就不可“变”】
Null,Undefined,布尔值(Boolean),字符串(String),数值(Number),(独一无二)Symbol
复杂数据类型或者引用类型:【按引用访问】
对象(Object)
Null类型
这个类型就只有一个null的值,表示空对象指针【使用 typeof 操作符检测 null 值时会返回“object”的原因】
typeof null; // "object"
一个空对象的初始化可赋值为null,可以判断相应的变量是否已经保存过一个对象的引用
// 判断是否保存过一个对象的引用
if (apple != null){
// 对 apple 对象执行某些操作
}
Undefined类型
这个类型就只有一个undefined的值,声明了但是没有赋值,就产生;
// 声明变量,没赋值
var message;
console.log(message); // "undefined"
console.log(typeof message); // "undefined"
Boolean类型
只有两个值:true和false
能够转换成布尔值的分布:Boolean(**)
数据类型 | 转true | 转false |
---|---|---|
Boolean | true | false |
String | 非空字符串 | “”【空字符串】 |
Number | 非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | / | undefined |
String类型
字符串,一旦创建就不能改变【改变变量保存的字符串,都是先销毁,再填充进去】;
String 有最大长度是 2^53 - 1,UTF16的编码
所有类型转字符类型,可以使用String(**)
Number类型
“数字”,对应数学中的有理数【包括整数,有限小数和无限循环小数和分数】,但是有精度限制:
- Number 类型有 18437736874454810627(即 2^64-2^53+3) 个值;
- 浮点数值的最高精度是 17 位小数【小数点后】;
符合 IEEE 754-2008 规定的双精度浮点数规则,提供数值范围:
- NaN(非数值),0 除以 0 会返回NaN…Number(“Hello world!”)…
- Infinity(正无穷),超出在
Number.MAX_VALUE
,显示Infinity - -Infinity(负无穷),超出在
Number.MIN_VALUE
,显示-Infinity
同时也因为应用了这个规则,出现了浮点数计算精度问题,例如 0.1 + 0.2 != 0.3,却0.01+0.02=0.03【查看下一篇记录】;
Symbol类型
ES6中引入的新类型,表示独一无二的存在,在 ES6 规范中,整个对象系统被用 Symbol 重塑;
typeof Symbol('apple'); // "Symbol"
作用:作为对象属性的唯一标识符,防止对象属性冲突发生。
// 如果同一个对象属性,如果整合,就产生冲突,覆盖,但Symbol可以避免
let info1 = {
name: "apple",
job: "pineapple",
[Symbol("description")]: "系个apple噶样"
}
let info2 = {
[Symbol("description")]: "成个pine甘样"
}
// 整合
let target = {};
Object.assign(target, info1, info2);
// 结果
{
job: "pineapple",
name: "apple",
Symbol(description): "系个apple噶样",
Symbol(description): "成个pine甘样"
}
当使用JSON.strIngify()
时以symbol
值作为键的属性会被完全忽略,示意代码:
JSON.stringify({[Symbol("foo")]: "foo"}); // '{}'
Symbol在for...in
迭代中不可枚举,如果想要达到效果,借助Object.getOwnPropertySymbols(obj)
这个方法。
Object类型
一个数据和功能的集合,用key-value结构展示,key是字符串或者symbol类型,value可以是全部数据存放;储存堆内存中;当复制引用类型的值时,复制它的引用(改变其中一个,另一个随之改变),比较时按其引用比较。
创建对象:
1.使用new操作后跟Object构造函数
var apple = new Object();
apple.name = "pineapple";
apple.age = 25;
2.对象字面量表示法,
var apple = {
name: "pineapple",
age: 25
}
访问对象属性:
- 点表示法:apple.name // “pineapple”
- 方括号表示法:apple[“name”] // “pineapple”
删除对象属性:
delete apple.age
变量解除对象引用,垃圾收集器释放内存:
var appleObj = {};
appleobj =null;
内建类型实例化
- Array 数组类型,以数字为索引的一组值的有序列表
- Date 日期和时间类型
- Error 运行期错误类型
- Function 函数类型
- Object 通用对象类型
- RegExp 正则表达式类型
instanceof
操作符可鉴别继承类型。这意味着所有对象都是 Oject
的实例,因为所有引用类型都继承自 Object
。
var items = [];
var obj = {};
function reflect(value){
return value;
}
console.log(items instanceof Array); // true;
console.log(obj instanceof Object); // true;
console.log(reflect instanceof Function); // true;
微信公众号:**游戏机室
**