js知识点复习
浅拷贝与深拷贝
浅拷贝
1
2
3
4
5
6
7
8function extendCopy(p, c) {
var c = c || {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}1
2
3// ES2015 的语法,性能良好
var a = {};
var b = Object.assign({}, a);深拷贝
递归方法
1
2
3
4
5
6
7
8
9
10
11
12function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] == 'object') {
c[i] = p[i].constructor === Array ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}JSON 对象的提供的方法,性能不太理想
1
2var a = {};
var b = JSON.parse(JSON.stringify(a));能够处理JSON格式的所有数据类型,但是对于正则表达式类型、函数类型等无法进行深拷贝,而且会直接丢失相应的值,还有就是它会抛弃对象的constructor。也就是深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。
什么是跨域
拥有相同的协议、端口和主机,那么就属于同一个源(origin)。反之,不符合条件的都是跨域。
GET 和 POST 的区别
GET 和 POST 长度的限制问题
GET 是通过 URL 提交数据,因此 GET 可提交的数据量就跟 URL 所能达到的最大长度有直接关系。实际上 HTTP 协议对 URL 长度是没有限制的;限制 URL 长度大多数是浏览器或者服务器的配置参数;同样的,HTTP 协议没有对 POST 进行任何限制,一般是受服务器配置限制或者内存大小。GET 和 POST 的安全性
GET 是通过 URL 方式请求,可以直接看到,明文传输。POST 是通过请求 header 请求,可以开发者工具或者抓包可以看到,同样也是明文的。GET 请求会保存在浏览器历史纪录中,还可能会保存在 Web 的日志中。对服务器状态的影响
根据 http 的设计,GET 应该对服务器状态没有修改,而 POST 应该对服务器状态做修改。幂等
幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照 RFC 规范,PUT,DELETE 和安全方法都是幂等的,POST 语义不是幂等的。总结
改变服务器状态 不改变服务器状态 幂等 PUT GET 不幂等 POST 无
原型、原型链、继承
prototype:构造函数中的属性,指向该构造函数的原型对象。
constructor:原型对象中的属性,指向该原型对象的构造函数
_proto_:实例中的属性,指向 new 这个实例的构造函数的原型对象
apply|call|bind 组成的黑魔法
1 | Function.prototype.bind.apply( |
vue2.x 官方文档中新建一个已初始化的数组方式
1 | const length = 5; // length是个number类型 |
Object.seal 封闭对象
Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。
1 | const a = { |
Object.freeze 冻结对象
Object.freeze() 方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。
如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。数组作为一种对象,被冻结,其元素不能被修改。没有数组元素可以被添加或移除。