zoukankan      html  css  js  c++  java
  • JavaScript实现深拷贝(深复制) 面试题

    1、两种方法实现深拷贝(深复制)

    (1)方法一:兼容性好,请仔细看代码(网上大部分代码有Bug)

    (2)方法二:需要对象满足JSON数据格式。JOSN数据格式:http://www.cnblogs.com/mengfangui/p/8257269.html

    (3)使用类库,如lodash的_.cloneDeep(value)方法。

    2、代码

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <meta http-equiv="X-UA-Compatible" content="ie=edge" />
            <title>JavaScript实现深拷贝(深复制)</title>
        </head>
    
        <body>
    
            <script>
                var obj = {
                    name: null,
                    age: 10
                }
                //方法一:兼容性好
                function deepClone(obj) {
                    var o = obj instanceof Array ? [] : {};
                    for(var k in obj) {
                        //有bug(属性的值为null时)
                        //o[k] = typeof obj[k] === 'object'?deepClone(obj[k]):obj[k];
                        if(typeof obj[k] === 'object' && obj[k] != undefined) {
                            o[k] = deepClone(obj[k]);
                        } else if(typeof obj[k] === 'object' && obj[k] == undefined) {
                            o[k] = null;
                        } else {
                            o[k] = obj[k];
                        }
                    }
                    return o;
                }
                //方法二:只能处理符合JSON格式的对象
                function deepClone2(obj) {
                    return JSON.parse(JSON.stringify(obj))
                }
                console.log(deepClone(obj));
                console.log(deepClone2(obj));
            </script>
        </body>
    
    </html>

     3、浅拷贝;

    Object.assign()函数

  • 相关阅读:
    jquery index与eq
    尝试一下
    document
    2017-03-28 java script DOM操作
    2017-03-25 CSS 样式
    CSS 样式表分类
    CSS 样式表
    HTML 框架
    表格
    HTML常用标记
  • 原文地址:https://www.cnblogs.com/mengfangui/p/8649080.html
Copyright © 2011-2022 走看看