Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么类/类型未定义,是否可以扩展/添加方法?_Javascript_Jquery_Class_Undefined_Extend - Fatal编程技术网

Javascript 什么类/类型未定义,是否可以扩展/添加方法?

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',代码如下:

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