6种简单数据类型:Undefind,Null,Boolean,Number,String,Symbol
1种复杂数据类型:Object
typeof的值:undefined,boolean,number,string,object,function,symbol, typeof null = object
注意:null == undefind //true,undefined是由null派生出来的
- 1.Symbol的常用内置符号:用于暴露语言内部行为,开发者可以直接访问,重写或者模拟这些行为
- 1.1 Symbol.asyncIterator:一个方法,该方法返回对象默认的AsyncIterator,由for-await-of语句使用
- 1.2 Symbol.hasInstance:一个方法,该方法决定一个构造器对象是否认可一个对象的实例。由instanceof操作符使用
- 1.3 Symbol.isConcatSpreadable:一个布尔值,如果是true或者是默认值(undefined),则意味着对象应该用Array.prototype.concat()打平其数组元素,否则会追加到数据末尾
- 1.4 Symbol.iterator: 一个方法,该方法返回对象默认的迭代器,由for-of语句使用
- 1.5 Symbol.match:一个正则表达式方法,该方法用正则表达式去匹配字符串,由String.prototype.match()方法使用
- 1.6 Symbol.replace: 一个正则表达式方法,该方法替换一个字符串中匹配的子串,由String.prototype.replace()方法使用
- 1.7 Symbol.search:一个正则表达式方法,该方法返回字符串中匹配正则表达式的索引,由String.prototype.search()方法使用
- 1.8 Symbol.species:一个函数值,该函数作为创建派生对象的构造函数
- 1.9 Symbol.split:一个正则表达式方法,该方法在匹配正则表达式的索引位置拆分字符串,由String.prototype.split()方法使用
- 2.0 Symbol.toPrimitive:一个方法,该方法将对象转换为相应的原始值,由ToPrimitive抽象操作使用
- 2.1 Symbol.toStringTag:一个字符串,该字符串用于创建对象的默认字符串描述。由内置方法Object.prototype.toString()使用
- 2.2 Symbol.unscopables:一个对象,该对象所有的以及继承的属性,都会从关联对象的with环境绑定中排除
//以toPrimitive为例,重写toPrimitive
class Foo {}
let foo = new Foo();
console.log(3 + foo); // "3[object Object]"
console.log(3 - foo); // NaN
console.log(String(foo)); // "[object Object]"
class Bar {
constructor() {
this[Symbol.toPrimitive] = function(hint) {
switch (hint) {
case 'number':
return 3;
case 'string':
return 'string bar';
case 'default':
default:
return 'default bar';
}
}
} }
let bar = new Bar();
console.log(3 + bar); // "3default bar"
console.log(3 - bar); // 0
console.log(String(bar)); // "string bar"
2.Object:一组数据和功能的集合
每个object实例都有如下属性和方法:
- construntor:用于创建当前对象的函数 - hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性 - isPrototypeOf:用于判断当前对象是否为另一个对象的原型 - propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用for-in语句枚举 - toLocaleString():返回对象的字符串表示 - toString():返回对象的字符串表示 - valueOf():返回对象的字符串,数值或布尔值表示3.一元操作符:
const num1 = 2;
const num2 = 20;
const num3 = --num1 + num2;
const num4 = num1 + num2;
console.log(num3, num4) //报错TypeError,因为--num1相当于num1 = num1-1,所以num1应该定义成let
4.for-in:用于枚举对象中的非符号键属性
//显示window的所有属性
for(const propName in window){
console.log(propName)
}
5.for-of:用于遍历可迭代对象的元素
for(const el of [2,4,6,8]){
console.log(el)
}