判断类型
function isSample (arg) {
let arr = ['number', 'boolean', 'string', 'undefined', 'null']
let type = typeof arg;
if (arr.includes(type)) {
return true
}
}
function isArray (arg) {
return Array.isArray(arg);
}
function isFunction (arg) {
return typeof arg === 'function'
}
function isObject (arg) {
console.log(Object.prototype.toString.call(arg));
return Object.prototype.toString.call(arg) === '[object Object]';
}
实现对象的深拷贝
如果对象里面没有方法、undefined
let endObj = JSON.parse(JSON.stringify(startObj))- 如果有属性、有方法
(1)循环遍历(还未完成)
// 这儿结合了上面的判断类型
function deepClone(arg) {
if (isSample(arg)) {
return arg;
}
if (isArray(arg)){
console.log('这儿是数组', arg)
if (arg.length === 0) {
return []
} else {
let arr = [];
for (var i = 0; i < arg.length; i++) {
arr.push(deepClone(arg[i]))
}
return arr;
}
}
if (isObject(arg)) {
let keys = Object.keys(arg);
if (keys.length === 0) {
return {}
} else {
let obj = {}
for (let key of keys) {
obj[key] = deepClone(arg[key])
}
return obj
}
}
if (isFunction(arg)) {
// 这儿还要改进
return arg;
}
}
(2)将对象抽象成一个返回对象的函数
function fn () {
return {
name: 'sting',
age: 18,
sayHi () {
console.log('hello');
}
}
}
let obj = fn();
let obj1 = fn();
console.log(obj === obj1); // false