文章目录
一、数字拓展
1、Number.isNaN——判定一个数字是否是NaN
全局中的isNaN,会进行数据类型的转换 先尽可能转为数字 再判定
Number.isNaN, 不会进行数据类型的转换 参数只要不是数字类型 就为false
2、Number.isFinite——判定一个值是否是有限的
全局中的isFinite,会进行数据类型的转换 先尽可能转为数字 再判定
Number.isFinite, 不会进行数据类型的转换 参数只要不是数字类型 就为false
3、Number.isInteger——判定一个数字是否是整数
先判定是否是数字,如果是,再继续判定是否是整数。 如果不是,直接返回false。
二、对象拓展
1、Object.is——比较两者是否完全相等
与=== 的区别:
1、Object.is(NaN, NaN); => true NaN === NaN => false
2、Object.is(0, -0); => false 0 === -0 => true
2、Object.assign——让一个对象继承另外一个或者多个对象的属性和方法
Object.assign(obj); 浅复制
obj: 继承者
除了第一个参数之外,后面还可以放任意个参数。每一个参数都是被继承者。
Object.assign(obj, obj1, obj2, obj3);
修改一个对象(被继承者)的时候,影响到了另外一个对象(继承者) 说明是浅复制
jquery的浅复制: . e x t e n d ( o b j , o b j 1 ) ; 深 复 制 : .extend(obj, obj1); 深复制: .extend(obj,obj1);深复制:.extend(true, obj, obj1);
underscore只有浅复制:继承 .extend(obj, obj1);浅复制:.clone(obj1); 返回值是被复制的新对象
三、代理对象——proxy构造函数
目的:对目标对象保护;外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写
new Proxy(targetObject, handlerObject);
targetObject: 被代理的对象;
handlerObject: 访问方式 其实就是ES5里的get set特性
代理对象自身没有任何属性和方法
var obj = {
name: "赵丽颖",
age: 31,
married: "是"
}
// 当该对象不想被人访问时 可以设置代理
var proxy = new Proxy(obj, {
// get表示当通过proxy对象访问obj的属性时 调用的方法以及返回的内容
get: function(target, propName, proxy) {
// 判定
if(propName === "married") {
return "保密";
}
// 如果不是询问婚姻状况,则如实回答
return target[propName];
},
// set表示当通过proxy对象对obj对象的属性进行修改时 调用的方法以及是否设置
set: function(target, propName, value, proxy) {
// 禁止修改名字和年龄
if (propName === "name" || propName === "age") {
return null;
}
// 其它属性可以设置
target[propName] = value;
}
})
四、Symbol
数据类型,代表独一无二的符号
属于基本类型(值类型)由Symbol函数生成,参数没有意义,两个Symbol实例永不相同
let s = Symbol("color");
let s1 = Symbol("color");
console.log(s === s1);// false
如果将Symbol当做对象的key 则该key不可枚举
五、对象语法拓展
1、当对象的key与对象的value一致时,可以省略 :value
2、使用[] 来定义对象
3、定义对象的方法的时候,可以取消: function了
//使用[] 来定义对象
var user = "student";
// 定义一个对象
var obj = {
[user + "name"]: "你好"
}
console.log(obj)// { studentname: "你好"}
// 定义对象的方法的时候,可以取消: function了
var obj = {
intro: function() {
} }
//可修改为:
var obj1 = {
intro() {
} }
六、解构对象、数组
var Tom = {
username: "张三",
age: 12,
gender: "男",
married: false
}
var {
username, age, gender, married} = Tom;
console.log(username, age, gender, married) //Tom 12 男 false
var arr = [1, 2, 3, 4