JS,返回友好而不是未定义的东西

时间:2012-03-22 04:12:41

标签: javascript

我正在javascript中创建一个字典对象(例如关联数组)

var myobj = {
  "a" : "Some string",
  "b" : "Some string else"
}

如果我访问myobj.a,它将返回“Some string” 但如果我访问列表中没有的东西myobj.c它返回undefined。 有没有办法设置对象getter返回类似:“键不可用” 我们可以使用原型...... 谢谢你的帮助

2 个答案:

答案 0 :(得分:6)

是/否。

使用ES5

无法拦截密钥上的泛型get

使用方法

var Dictionary = {
    get: function (key) {
        if ({}.hasOwnProperty.call(this, key)) {
            return this[key]
        }
        return "Key not available"
    }
}

请注意,使用对象作为字典存在一些缺陷,请考虑使用strmap

之类的模块

使用ES6代理(未在浏览器中实现)

使用ES6 proxy

var dictionary = Proxy({}, {
    get: function (target, name) {
        if ({}.hasOwnProperty.call(target, name)) {
            return target[name
        }
        return "Key not available"
    }
})

使用ES6地图(可调)

只需使用ES6 map

即可
var dict = new Map
dict.set("foo", "bar")
dict.get("foo")

答案 1 :(得分:4)

一种简单的方法是创建一个包装器方法,该方法首先测试密钥是否存在,如果不存在则返回标准文本。

e.g。

// ... in your object definition, depending on how you have done it
get: function(key) {
    if (key in this) {
        return this[key];
    } else {
        return 'Key not available.';
    }
}

然后使用它:a.get('c')