资讯专栏INFORMATION COLUMN

一道关于javascript数据类型题目的思考

ralap / 3061人阅读

摘要:感觉这个题目涉及的基础知识内容比较多,故分享出来,后面会详细介绍数据类型的文章,欢迎关注。实现一个函数,可以对中的种主要的数据类型包括进行值复制。

感觉这个题目涉及的基础知识内容比较多,故分享出来,后面会详细介绍数据类型的文章,欢迎关注。

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

  /**
 * 对象克隆
 * 支持基本数据类型及对象
 * 递归方法
 */
function clone(obj) {
    var o;
    switch (typeof obj) {
        case "undefined":
            break;
        case "string":
            o = obj + "";
            break;
        case "number":
            o = obj - 0;
            break;
        case "boolean":
            o = obj;
            break;
        case "object": // object 分为两种情况 对象(Object)或数组(Array)
            if (obj === null) {
                o = null;
            } else {
                if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
                    o = [];
                    for (var i = 0; i  obj.length; i++) {
                        o.push(clone(obj[i]));
                    }
                } else {
                    o = {};
                    for (var k in obj) {
                        o[k] = clone(obj[k]);
                    }
                }
            }
            break;
        default:
            o = obj;
            break;
    }
    return o;
}

如果你有高级前端的水平,这个时候就应该写出下面的代码

Object.prototype.clone = function(){

            var o = this.constructor === Array ? [] : {};

            for(var e in this){

                    o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];

            }

            return o;
    }

基础知识还需要牢固,要不怎么能写出这样高端的写法呢?哈哈?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88314.html

相关文章

  • 一道前端面试题引发思考

    摘要:直接开始题目是厉害了说句实话开发中谁写成这样保证会被打死。不过面试就是面试,有面试官的考量点。官方是这么说的。结果完美,不过小姐姐的意思是数组的方法会自动触发数组的。 直接开始题目是 if(a==1 && a==2 && a==3){ alert(厉害了) } 说句实话开发中谁写成这样保证会被打死。 不过面试就是面试,有面试官的考量点。 我理解的点有两个 1、隐式类型转换 先说...

    gaomysion 评论0 收藏0
  • 前端_JavaScript

    摘要:为此决定自研一个富文本编辑器。例如当要转化的对象有环存在时子节点属性赋值了父节点的引用,为了关于函数式编程的思考作者李英杰,美团金融前端团队成员。只有正确使用作用域,才能使用优秀的设计模式,帮助你规避副作用。 JavaScript 专题之惰性函数 JavaScript 专题系列第十五篇,讲解惰性函数 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意...

    Benedict Evans 评论0 收藏0
  • 一道JS试题引发思考

    摘要:也给当初出入迷宫的我不小考验,一道题目可以引发许多思考,今天写下的只是今时今日的想法,到未来也许还有别样的看法。对于回调函数,可以对其传入三个参数分别是当前元素,元素索引,调用的数组。 [1,2,3].map(parseInt) 这道JS题目,相信大家并不会陌生。也给当初出入JS迷宫的我不小考验,一道题目可以引发许多思考,今天写下的只是今时今日的想法,到未来也许还有别样的看法。...

    xiao7cn 评论0 收藏0
  • 一道小小题目引发对javascript支持正则表达式相关方法探讨

    摘要:返回值返回值根据传入的参数类型和规则的不同,返回的内容不同,但总体来说,它是返回一个对象,而不是索引,如果没匹配到任何符合条件的字符串,则返回。 本文发布在我的博客一道小小的题目引发对javascript支持正则表达式相关方法的探讨许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。 以前对于正则是非常惧怕的,因为看不懂和学不会。但最近项目中频繁的...

    Scholer 评论0 收藏0
  • 一道有价值JS继承面试题

    摘要:题目原题目来源于一个网友的问答补充代码我有个我有个分析题目希望生成一个新的构造函数,继承于。尽量不要更改题目表达出希望有方法实现构造函数继承,又需要原型继承。的指向显然要改成指向子类构造函数中的。 题目 原题目来源于一个网友的问答 var A = function() { this.name = apple; } A.prototype.getName = function()...

    darkbug 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<