JavaScript中不赋值的可能问题

JavaScript中不赋值的可能问题,javascript,Javascript,我有一段代码: function HeyHo(test){ var self = this; self.yo; if (test > 2) { self.yo = {}; } } $('.result').text(new HeyHo(3).yo === undefined) 输出为: false true 如预期,当值小于2时,输出为: false true 这也是意料之中的 但显然,这样做: self.yo; self.yo; 不是任务或电话

我有一段代码:

function HeyHo(test){
  var self = this;

  self.yo;

  if (test > 2) {
    self.yo = {};
  }
}

$('.result').text(new HeyHo(3).yo === undefined)
输出为:

false
true
如预期,当值小于2时,输出为:

false
true
这也是意料之中的

但显然,这样做:

self.yo;
self.yo;
不是任务或电话。是否存在与此相关的性能或其他问题

关键是要让值以未定义的
开头,然后有条件地给它一个值,这样我就可以在以后的代码中进行检查

但显然,这样做:

self.yo;
self.yo;
不是任务或电话。是否存在与此相关的性能或其他问题

是的:这毫无意义。:-)它没有任何效果,可以简单地删除。它所做的只是在
self
上查找
yo
属性(该属性不在那里,因此查找将导致
未定义
),然后丢弃该值。从理论上讲,不必要的查找对性能的影响非常小,但要让它真正出现,你必须做大量的查找(比如“银河系中有多少颗星星”),这是假设JS引擎没有意识到它可以优化它

您也不需要
self
。此代码在功能上与您的版本相同:

function HeyHo(test){
  if (test > 2) {
    this.yo = {};
  }
}

$('.result').text(new HeyHo(3).yo === undefined)

请回复您的评论:


我这样做是因为检查一个对象是否未定义比检查它是否为空更容易,所以我不需要在填充它的可能性下执行
self.yo={}
,而是先让它
未定义
来消除这种变化

self.yo行根本不对对象做任何事情,尤其是它不会在对象上创建
yo
属性:

函数HeyHo1(){
这个.哟,;
}
函数HeyHo2(){
this.yo=未定义;
}
var h1=新的HeyHo1();
log(“h1是否有'yo'?”+('yo'在h1中?'Yes':'No');//不
var h2=新的HeyHo2();
log(“h2是否有'yo'?”+('yo'在h2中?'Yes':'No');//是

但显然,这样做:

self.yo;
self.yo;
不是任务或电话。是否存在与此相关的性能或其他问题

是的:这毫无意义。:-)它没有任何效果,可以简单地删除。它所做的只是在
self
上查找
yo
属性(该属性不在那里,因此查找将导致
未定义
),然后丢弃该值。从理论上讲,不必要的查找对性能的影响非常小,但要让它真正出现,你必须做大量的查找(比如“银河系中有多少颗星星”),这是假设JS引擎没有意识到它可以优化它

您也不需要
self
。此代码在功能上与您的版本相同:

function HeyHo(test){
  if (test > 2) {
    this.yo = {};
  }
}

$('.result').text(new HeyHo(3).yo === undefined)

请回复您的评论:


我这样做是因为检查一个对象是否未定义比检查它是否为空更容易,所以我不需要在填充它的可能性下执行
self.yo={}
,而是先让它
未定义
来消除这种变化

self.yo行根本不对对象做任何事情,尤其是它不会在对象上创建
yo
属性:

函数HeyHo1(){
这个.哟,;
}
函数HeyHo2(){
this.yo=未定义;
}
var h1=新的HeyHo1();
log(“h1是否有'yo'?”+('yo'在h1中?'Yes':'No');//不
var h2=新的HeyHo2();
log(“h2是否有'yo'?”+('yo'在h2中?'Yes':'No');//是

但显然,这样做:

self.yo;
self.yo;
不是任务或电话。是否存在与此相关的性能或其他问题

是的:这毫无意义。:-)它没有任何效果,可以简单地删除。它所做的只是在
self
上查找
yo
属性(该属性不在那里,因此查找将导致
未定义
),然后丢弃该值。从理论上讲,不必要的查找对性能的影响非常小,但要让它真正出现,你必须做大量的查找(比如“银河系中有多少颗星星”),这是假设JS引擎没有意识到它可以优化它

您也不需要
self
。此代码在功能上与您的版本相同:

function HeyHo(test){
  if (test > 2) {
    this.yo = {};
  }
}

$('.result').text(new HeyHo(3).yo === undefined)

请回复您的评论:


我这样做是因为检查一个对象是否未定义比检查它是否为空更容易,所以我不需要在填充它的可能性下执行
self.yo={}
,而是先让它
未定义
来消除这种变化

self.yo行根本不对对象做任何事情,尤其是它不会在对象上创建
yo
属性:

函数HeyHo1(){
这个.哟,;
}
函数HeyHo2(){
this.yo=未定义;
}
var h1=新的HeyHo1();
log(“h1是否有'yo'?”+('yo'在h1中?'Yes':'No');//不
var h2=新的HeyHo2();
log(“h2是否有'yo'?”+('yo'在h2中?'Yes':'No');//是

但显然,这样做:

self.yo;
self.yo;
不是任务或电话。是否存在与此相关的性能或其他问题

是的:这毫无意义。:-)它没有任何效果,可以简单地删除。它所做的只是在
self
上查找
yo
属性(该属性不在那里,因此查找将导致
未定义
),然后丢弃该值。从理论上讲,不必要的查找对性能的影响非常小,但要让它真正出现,你必须做大量的查找(比如“银河系中有多少颗星星”),这是假设JS引擎没有意识到它可以优化它

您也不需要
self
。此代码在功能上与您的版本相同:

function HeyHo(test){
  if (test > 2) {
    this.yo = {};
  }
}

$('.result').text(new HeyHo(3).yo === undefined)

请回复您的评论:


我这样做是因为更容易检查