1.new.target见解
作用:new.target属性是用来检测函数或者构造方法是否是通过new关键字被调用的。
注意:在通过new关键字被初始化的函数或者构造方法中,new.target返回的是一个指向构造方法或函数的引用。
在普通函数调用中,new.target的值是undefined。
// ES6方法,new.target 进行判断是否使用new关键字来调用
function Person(firstName,lastName){
if(new.target === undefined){
throw new Error('该函数必须使用new调用')
}
this.firstName = firstName;
this.lastName = lastName;
this.fullName = `${firstName}${lastName}`;
}
const p1 = new Person('千','里');
// console.log(p1);
// const p2 = Person('万','里');
// console.log(p2);
const p3 = Person.call('p1','李','白');
console.log(p3);
通过上述代码可以检测出有没有使用new关键字
注意:改变this的指向,没有真正使用new也会检测出来。
2.is()方法
判断两个值是否相等,相当于===符号的比较
注意:在ES6中is() 里NaN和0这两个除外,如
console.log(NaN === NaN) // false
console.log(+0 === -0) // true
console.log(Object.is(NaN,NaN)); //true
console.log(Object.is(+0,-0)); //false
3. getOwnPropertyNames()方法
用来获取对象的属性名,返回为一个数组,数组中的数据会枚举出来对象的属性。
数组中不可枚举属性的顺序,如果带有数字类型的,则按照从小到大排列。如果是字符,则按照浏览器厂商来定义。
const obj = {
e : 1,
a : 2,
c : 3,
b : 4,
0 : 5,
3 : 6,
1 : 7
}
// // 对象的属性渲染顺序会按照浏览器厂商规定
const arr = Object.getOwnPropertyNames(obj);
console.log(arr);