Javascript 什么类/类型未定义,是否可以扩展/添加方法?
我有一个散列'h',代码如下:Javascript 什么类/类型未定义,是否可以扩展/添加方法?,javascript,jquery,class,undefined,extend,Javascript,Jquery,Class,Undefined,Extend,我有一个散列'h',代码如下: h[key].dostuff() 当散列中不存在键时,h[key]是未定义的,我得到一个错误,说我不能调用未定义的方法'dostuff' 如果undefined是一个可扩展类,是否仍有必要将此方法添加到undefined 我确信这一定是一种常见的情况,那么是否有一种更好的方法来处理这一问题,而不必求助于变通功能,例如hh(key),在其中我可以操纵未定义的结果 谢谢 if( h[key]) h[key].dostuff() 这是一个检查“如果值存在,d
h[key].dostuff()
当散列中不存在键时,h[key]是未定义的,我得到一个错误,说我不能调用未定义的方法'dostuff'
如果undefined是一个可扩展类,是否仍有必要将此方法添加到undefined
我确信这一定是一种常见的情况,那么是否有一种更好的方法来处理这一问题,而不必求助于变通功能,例如hh(key),在其中我可以操纵未定义的结果
谢谢
if( h[key])
h[key].dostuff()
这是一个检查“如果值存在,doStuff()”
这是一个检查“if value exist,doStuff()”因为在javascript中
undefined
等同于false
,所以可以将值检查和函数调用结合起来,如下所示:
h[key] && h[key].dostuff();
h.get = function(key) {
if(this.hasOwnProperty(key))
return this[key];
//here return a default object, whatever that would be
return {doStuff: function() {
//default doStuff function
}};
};
h.get(key).doStuff();
这确保了如果
h[key]
有一个值,就会调用dostuff()
。因为未定义的
在javascript中等同于false
,您可以将值检查和函数调用结合起来,如下所示:
h[key] && h[key].dostuff();
h.get = function(key) {
if(this.hasOwnProperty(key))
return this[key];
//here return a default object, whatever that would be
return {doStuff: function() {
//default doStuff function
}};
};
h.get(key).doStuff();
这可以确保如果
h[key]
有一个值,则调用dostuff()
。您可以始终执行以下操作:
h[key] && h[key].dostuff();
h.get = function(key) {
if(this.hasOwnProperty(key))
return this[key];
//here return a default object, whatever that would be
return {doStuff: function() {
//default doStuff function
}};
};
h.get(key).doStuff();
我知道这是一个有点强制的解决方案,但它可以以某种方式模仿默认行为。您总是可以这样做:
h[key] && h[key].dostuff();
h.get = function(key) {
if(this.hasOwnProperty(key))
return this[key];
//here return a default object, whatever that would be
return {doStuff: function() {
//default doStuff function
}};
};
h.get(key).doStuff();
我知道这是一个有点强制的解决方案,但它可以以某种方式模仿默认行为。未定义实际上就是未定义。这意味着没有价值,也找不到价值。在本例中,这意味着“h”对象上没有名称为“key”值的属性。(edit实际上
undefined
也可以是未初始化变量的“值”;JavaScript将这种情况与null
变量区分开来,这有点奇怪。)h[key]&&h[key]。dostuff()
?谢谢大家。希望undefined将属于可扩展类,类似于ruby中可扩展的nil和NilClass。啊,好吧,没有定义就是没有定义。这意味着没有价值,也找不到价值。在本例中,这意味着“h”对象上没有名称为“key”值的属性。(edit实际上undefined
也可以是未初始化变量的“值”;JavaScript将这种情况与null
变量区分开来,这有点奇怪。)h[key]&&h[key]。dostuff()
?谢谢大家。希望undefined将属于可扩展类,类似于ruby中可扩展的nil和NilClass。啊,好吧。我明白为什么它会比使用“普通”的if
语句更好,但我更喜欢可读性,我会选择它。看到逻辑值像这样在解释器的深渊中消失,我感到非常不安。看到逻辑值像这样在解释器的深渊中消失,我感到非常不安。
Ha!欢迎使用Javascript:D中的数据类型无论是使用这种方法还是标准的if
条件,都取决于个人偏好。为了简洁起见,我更喜欢这一条。如果我为单个语句编写if条件,我的团队负责人会惩罚我,他也更喜欢&&DI,看看为什么它比使用“普通”的if
语句更好,但我更喜欢可读性,我会同意。看到逻辑值像这样在解释器的深渊中消失,我感到非常不安。看到逻辑值像这样在解释器的深渊中消失,我感到非常不安。
Ha!欢迎使用Javascript:D中的数据类型无论是使用这种方法还是标准的if
条件,都取决于个人偏好。为了简洁起见,我更喜欢这个。如果我为单个语句编写if条件,我的团队负责人会惩罚我,他也更喜欢&&=D