100分,三个基础js问题

bsnry 2017-08-24 06:07:55
  var Cat = {
    createNew: function(){
      var cat = {};
      cat.name = "大毛";
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };


问题1:var cat={}; 是替代 var cat = new Object吗?

问题2:

var cat1 = Cat.createNew(); //返回了cat,那么是深拷贝?
cat1.makeSound();


问题3:我 什么时候需要做一下操作?


if(Cat["name"] == undefined && Cat["name"] == "")
console.log("---------");

目的是什么?




...全文
359 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Love_云宝儿 2017-08-26
  • 打赏
  • 举报
回复
水一贴
letMeAlone_ 2017-08-26
  • 打赏
  • 举报
回复
引用 7 楼 bsnry 的回复:
再请教一个问题:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
为什么函数和函数之间必须用逗号隔开? 我用分号立即报错。 这是遵循什么原则? [quote=引用 6 楼 a250758092 的回复:] [quote=引用 4 楼 bsnry 的回复:] [quote=引用 3 楼 a250758092 的回复:] 1 、 { } 本身就是一个JSON对象,只不过内容是空的, 相当于初始化 2、 至于深拷贝还是浅拷贝是用于两个对象之间的“复制”这种说法,例子中只是此处只是返回了一个cat对象,不存在拷贝这种说法 3、 if(Cat["name"] == undefined && Cat["name"] == "") console.log("---------"); 这样做是为了确保cat对象的name属性被初始化,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name

var Cat = {
    createNew: function(name){
      var cat = {};
      cat.name=name;
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };
console.log(Cat.createNew().name);//如果此处不传参数则会输出undefined,所以需要加判断语句,将它初始为 ""
,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name 你确定是空值, 我举个例子吧:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
cat.name2; //这里是undefined还是null? [/quote] Cat["name"] == undefined && Cat["name"] == "" 我说的是这句代码,如果没有赋值,意味着这个变量是undefined,所以会执行后面那句,将它的值默认赋值为空【另外我现在才看到后面的是==不是=】,并不是说如果没有赋值它的默认值为空[/quote] 你好,我明白了你的意思,阁下的意思是说: 假设createNew里没有申明name这个属性,那么 Cat["name"] == undefined && Cat["name"] = "" 执行完== 后,再执行 =,这样就会添加属性,且赋值为空字符串。, 对否 ? [/quote] 对的,实际上A&&B 跟if(A){B}是一个道理,另外 为什么在两个function之间用的是逗号而不是分好,是因为Cat是一个JSON对象,它需要符合JSON的格式 {a:'a',b:'b'} 中间的是用分好隔开,key和value对应,只不过这里的value是一个函数而已
bsnry 2017-08-26
  • 打赏
  • 举报
回复
再请教一个问题:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
为什么函数和函数之间必须用逗号隔开? 我用分号立即报错。 这是遵循什么原则?
引用 6 楼 a250758092 的回复:
[quote=引用 4 楼 bsnry 的回复:] [quote=引用 3 楼 a250758092 的回复:] 1 、 { } 本身就是一个JSON对象,只不过内容是空的, 相当于初始化 2、 至于深拷贝还是浅拷贝是用于两个对象之间的“复制”这种说法,例子中只是此处只是返回了一个cat对象,不存在拷贝这种说法 3、 if(Cat["name"] == undefined && Cat["name"] == "") console.log("---------"); 这样做是为了确保cat对象的name属性被初始化,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name

var Cat = {
    createNew: function(name){
      var cat = {};
      cat.name=name;
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };
console.log(Cat.createNew().name);//如果此处不传参数则会输出undefined,所以需要加判断语句,将它初始为 ""
,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name 你确定是空值, 我举个例子吧:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
cat.name2; //这里是undefined还是null? [/quote] Cat["name"] == undefined && Cat["name"] == "" 我说的是这句代码,如果没有赋值,意味着这个变量是undefined,所以会执行后面那句,将它的值默认赋值为空【另外我现在才看到后面的是==不是=】,并不是说如果没有赋值它的默认值为空[/quote] 你好,我明白了你的意思,阁下的意思是说: 假设createNew里没有申明name这个属性,那么 Cat["name"] == undefined && Cat["name"] = "" 执行完== 后,再执行 =,这样就会添加属性,且赋值为空字符串。, 对否 ?
letMeAlone_ 2017-08-25
  • 打赏
  • 举报
回复
引用 4 楼 bsnry 的回复:
[quote=引用 3 楼 a250758092 的回复:] 1 、 { } 本身就是一个JSON对象,只不过内容是空的, 相当于初始化 2、 至于深拷贝还是浅拷贝是用于两个对象之间的“复制”这种说法,例子中只是此处只是返回了一个cat对象,不存在拷贝这种说法 3、 if(Cat["name"] == undefined && Cat["name"] == "") console.log("---------"); 这样做是为了确保cat对象的name属性被初始化,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name

var Cat = {
    createNew: function(name){
      var cat = {};
      cat.name=name;
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };
console.log(Cat.createNew().name);//如果此处不传参数则会输出undefined,所以需要加判断语句,将它初始为 ""
,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name 你确定是空值, 我举个例子吧:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
cat.name2; //这里是undefined还是null? [/quote] Cat["name"] == undefined && Cat["name"] == "" 我说的是这句代码,如果没有赋值,意味着这个变量是undefined,所以会执行后面那句,将它的值默认赋值为空【另外我现在才看到后面的是==不是=】,并不是说如果没有赋值它的默认值为空
  • 打赏
  • 举报
回复
bsnry 2017-08-25
  • 打赏
  • 举报
回复
引用 3 楼 a250758092 的回复:
1 、 { } 本身就是一个JSON对象,只不过内容是空的, 相当于初始化 2、 至于深拷贝还是浅拷贝是用于两个对象之间的“复制”这种说法,例子中只是此处只是返回了一个cat对象,不存在拷贝这种说法 3、 if(Cat["name"] == undefined && Cat["name"] == "") console.log("---------"); 这样做是为了确保cat对象的name属性被初始化,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name

var Cat = {
    createNew: function(name){
      var cat = {};
      cat.name=name;
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };
console.log(Cat.createNew().name);//如果此处不传参数则会输出undefined,所以需要加判断语句,将它初始为 ""
,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name 你确定是空值, 我举个例子吧:
var Cat2 = {
    createNew: function () {
        var cat = {};
        cat.name = "大毛";
        cat.name2;  //这里是undefined还是null? 
        cat.makeSound = function () { console.log("喵喵喵"); };
        return cat;
    },

    toString: function () {
        return "dxxxxddd";
    }

  };
cat.name2; //这里是undefined还是null?
letMeAlone_ 2017-08-24
  • 打赏
  • 举报
回复
1 、 { } 本身就是一个JSON对象,只不过内容是空的, 相当于初始化 2、 至于深拷贝还是浅拷贝是用于两个对象之间的“复制”这种说法,例子中只是此处只是返回了一个cat对象,不存在拷贝这种说法 3、 if(Cat["name"] == undefined && Cat["name"] == "") console.log("---------"); 这样做是为了确保cat对象的name属性被初始化,如果name没有被赋值的话则默认它为空值,一般的话在createNew这个函数中会有参数复制给name

var Cat = {
    createNew: function(name){
      var cat = {};
      cat.name=name;
      cat.makeSound = function(){ console.log("喵喵喵"); };
      return cat;
    }
  };
console.log(Cat.createNew().name);//如果此处不传参数则会输出undefined,所以需要加判断语句,将它初始为 ""
天际的海浪 2017-08-24
  • 打赏
  • 举报
回复
问题1: 是的,两者完全等价 问题2: 算是深拷贝,其实每次调用Cat.createNew()都会返回一个全新的对象 问题3: 这是判断对象中是不是有name属性,或name属性的值是不是空的。 当不确定对象中是不是有name属性,或name属性的值是不是空的时。就需要这个操作
似梦飞花 2017-08-24
  • 打赏
  • 举报
回复
1 基本一致 但不完全一致 貌似有一丢丢很小的很不明显的区别 看完忘了 2 每次都返回一个对象 互相不影响 3检测有没有name属相

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧