数据类型
js数据类型分为简单数据类型和复杂数据类型。
6种简单数据类型:
- 1.Undefined
- 2.Null
- 3,Bollean
- 4.Number
- 5.String
- 6.Symbol(es6新增,字符)
一种复杂数据类型:
- Object(对象)
null
undefined是由null派生过来的,因此他们表面上相等。由于他们的类型不同,所以不全等于。
console.log(null == undefined);//true
console.log(null === undefined);//false
Boolean
Boolean(变量)转型函数;
| 数据类型 | true | false |
|---|---|---|
| Boolean | true | false |
| String | 非空字符串 | “”(空字符串) |
| Number | 非零数值(包括无穷值) | 0,NaN |
| Object | 任意对象 | null |
| Undefined | 无 | undefined |
Bumber
浮点型只会保存近似值,因为对于有些小数,二进制是无法精确表示的。
Number.MIN_VALUE,最小值
Number.MAX_VALUE 最大值
infinity 无穷大
isFinite(变量)函数,判断是否在能表示范围内
isNaN(变量) 判断是否为NAN,如果是返回false,否则返回true,可以转换为数值的也为false
console.log(isNaN(NaN)); //true
console.log(isNaN(false)); //false
console.log(isNaN('19')); //false
console.log(isNaN("blrfea")); //true
console.log(isNaN(12));//false
number(变量 ): 转型函数,可用于任何数据类型,
转换规则:
- 布尔值,true转为1,false转为0
- 数值,直接返回
- null,返回0
- undefined 返回NaN
- 字符串:空字符串返回0,纯数字字符放回相应的数值,其他的都返回NaN
parseInt(变量,进制数)
将开头有整数的部分转为转为整数。
parseFloat(变量):将开头有小数的部分转为小数。
只能解析十进制
String
字符串的特点:
ECMAscript中的字符串是不可变得,一旦创建,值就不能改变了。要想修改,必须先销毁原始的字符串。然后将新的字符串保存到该变量。
tostring(); 转换为字符串函数。(null,undefined没有tostring()方法。)
变量加上一个空字符也可以转换为字符串:
let a = 321321;
a = a + '';
模板字面量:保留换行符,可以换行定义字符串。
let b = `feaf
feaf`;
模板字面量使用变量,插入值函数:${}
let c = `${a}+${b}=${a+b}`
Symbol类型
符号是原始值,且符号实例是唯一的,不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
//a和b是不相等的
let a = Symbol();
let b = Symbol();
let c = Symbol('ab');//可以传入字符串参数,作为对符号的描述
全局注册表
创建时会在全局中检索是否存在对应的符号,如果存在就使用现有的,没有就创建新的。
所有的参数必须使用字符串,因此传给Symbol.for()的所有参数都会转换为字符串。
let a = Symbol.for('symbol类型');
let b = Symbol.for();
console.log(b) //Symbol(undefined)
Symbol.keyFor();查询全局注册表,返回对应的字符串键。
let a = Symbol.for('abc');
console.log(Symbol.keyFor(a));//abc
使用符号作为属性的常用方法
Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
let obj = {};
let b = Symbol("b");
let c = Symbol("c");
Object.defineProperties(obj, {
[b]: {
value: "cde val",
},
[c]: {
value: "fff val",
},
});
**Object.defineProperty()** 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
let a = Symbol('abc');
let b = Symbol('cde');
let c = Symbol('fff');
let o = {
one: 'hello',
two: 'wird',
[a]: 'abc val'
};
Object.defineProperty(o, b, {
value: 'aaa'
});
Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
let a = Symbol('abc');
let b = Symbol('cde');
let c = Symbol('fff');
let o = {
one: 'hello',
two: 'wird',
[a]: 'abc val'
};
console.log(Object.getOwnPropertyNames(o));
//(2) ["one", "two"]
**Object.getOwnPropertySymbols()** 方法返回一个给定对象自身的所有 Symbol 属性的数组。
let obj = {
name: "wanmg",
age: 12,
};
let b = Symbol("b");
let c = Symbol("c");
Object.defineProperties(obj, {
[b]: {
value: "cde val",
},
[c]: {
value: "fff val",
},
});
console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(b), Symbol(c) ]
Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符。
let obj = {
name: "wanmg",
age: 12,
};
let b = Symbol("b");
let c = Symbol("c");
Object.defineProperties(obj, {
[b]: {
value: "cde val",
},
[c]: {
value: "fff val",
},
});
console.log(Object.getOwnPropertyDescriptors(obj));
/*{
name: {
value: 'wanmg',
writable: true,
enumerable: true,
configurable: true
},
age: { value: 12, writable: true, enumerable: true, configurable: true },
[Symbol(b)]: {
value: 'cde val',
writable: false,
enumerable: false,
configurable: false
},
[Symbol(c)]: {
value: 'fff val',
writable: false,
enumerable: false,
configurable: false
}
}*/
Reflect.ownKeys() :返回两种类型的键
let obj = {
name: "wanmg",
age: 12,
};
let b = Symbol("b");
let c = Symbol("c");
Object.defineProperties(obj, {
[b]: {
value: "cde val",
},
[c]: {
value: "fff val",
},
});
console.log(Reflect.ownKeys(obj));//[ 'name', 'age', Symbol(b), Symbol(c) ]