对象复制

复制对象

对于变量进行复制的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function clone(obj) {
if (obj && typeof obj === 'object') {
let cloneObj = Object.prototype.toString.call(obj).slice(8, -1) === 'Array' ? [] : {};
for (let prop in obj) {
if (obj[prop] && typeof obj[prop] === 'object') {
cloneObj[prop] = clone(obj[prop]);
} else {
cloneObj[prop] = obj[prop];
}
}
return cloneObj;
} else {
return obj;
}
}

要点

  1. 使用 Object.prototype.toString.call() 来判断数据是属于对象的哪一种子类型
    1
    2
    3
    4
    let a = [];
    typeof a; // object
    Object.prototype.toString.call(a) // "[object, Array]"
    Object.prototype.toString.call(a).slice(8, -1) // "Array"
  2. 在 js 中 null 代表假值, 并且 typeof nullobject检测类型为不为 null
    1
    2
    3
    4
    5
    6
    if (typeof obj === 'object' && obj) {
    }
    // 对于如果检查到的类型为 null 的时候
    if (obj === null) {
    // do something
    }
  3. null 表示类型尚未定义,表示未定义的类型, undefined 表示值没有被声明

获取class

使用原生的方法获取到 class 值的方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
function getClass(parent, sClass) {
let elements = parent.getElementsByTagName('*');
let eleResult = [];
// 使用 '\\b' 进行匹配一个单词的边界
let classReg = new RegExp('\\b' + sClass + '\\b', i);
for (let i = 0; i < elements.length; i++) {
if (classReg.test(elements[i].className)) {
eleResult.push(elements[i]);
}
}
return eleResult;
}