(笔记)梳理前端学习中常混淆知识

一、关于javascript中复制对象问题
浅复制代表复制的是该对象的引用,修改复制对象,会一同修改掉源对象;深复制,是真正的复制一个对象,无论怎么修改复制对象或者源对象,两者之间不会互相干扰。
Object.assgin 只能深拷贝第一层, 深层的还是浅拷贝;
json.stringify和json.parse可以实现深复制。但是前提是传入的字符串必须是合法的json字符串。

二、数组操作函数slice和splice的区别
slice不会修改原数组,而splice会修改原数组。有一个loash库封装了一些数组的常规操作。

三、commonjs、AMD、import的区别
commonjs是运行在服务器端的模块化编程的标准,用module.exports来输出对象的对象或方法,用require来引入外部模块。但是由于模块之间是同步加载,所以不适用与浏览器端。于是AMD规范就出来了。
AMD规范运用在浏览器端的模块化编程的标准,用define([‘a’,‘b’],function(){})来定义模块,用require([‘a’,‘b’,funciton(){}])或require.config({})来引入外部模块。模块间的依赖是异步加载的,requirejs就是运用了这样的规范。
ES6中的import和export就是基于AMD成本的语法规范,需要在编译时就引入。但是浏览器会自动解析成ES5的规范来执行。

四、关于原型链和原型
凡是用new function创造的对象为函数对象,其余对象为普通对象。凡是函数对象都有prototype属性。(但是Function.prototype是个函数对象)
obj1为实例对象;createobj为构造函数,createobj.prototype为原型对象
实例的构造函数属性指向其构造函数
原型对象的构造函数也指向构造函数
原型对象也是构造函数的一个实例
(笔记)梳理前端学习中常混淆知识_第1张图片
(笔记)梳理前端学习中常混淆知识_第2张图片
(笔记)梳理前端学习中常混淆知识_第3张图片
使用对象直接量给原型对象赋值,即如下的方式:
在这里插入图片描述
使用对象直接量方式定义的对象,其构造器(constructor)指向的是根构造器Object,Object.prototype是一个空对象{},{}自然与{getName: function(){}}不等
var p = {}
console.log(Object.prototype) // 为一个空的对象{}
console.log(p.constructor === Object) // 对象直接量方式定义的对象其constructor为Object
console.log(p.constructor.prototype === Object.prototype) // 为true,不解释(๑ˇ3ˇ๑)

五、关于判断null、undefined、0、‘ ’ 、{ } 、[ ]的方法
1、判断null;

var exp = null;
if(!exp && typeof(exp) !== 'undefined' && exp!== 0){
	console.log('is null')
}

2、判断undefined

var exp = undefined
if(typeof(exp) === undefined){
	console.log('is undefined')
}

你可能感兴趣的:(零碎知识点总结,基础知识点,web,JavaScript)