在没有hasOwnProperty的情况下检查JSON密钥

时间:2018-01-11 14:32:16

标签: javascript json

我有一个基本的JSON键值对象,没有嵌套。如果以下内容不在任何浏览器中引发错误,我就不会看到使用hasOwnProperty的重点。有人可以指出为什么这是安全的,不安全的,或者与可接受的做法相比较差?

这是一个设置默认IF的示例,输入为空或属性(键)不存在。

没有...

var config_arr = {key1:"val",key2:"val",key3:"val",default:"default val"};
var key = ""; //get value from user input, url param, route path, etc
var assign_val = (config_arr[key]?config_arr[key]:config_arr.default); 

...与

var config_arr = {key1:"val",key2:"val",key3:"val",default:"default val"};
var key = ""; //get value from user input, url param, route path, etc
var assign_val = (config_arr.hasOwnProperty(key)?config_arr[key]:config_arr.default);

使用第一种技术有什么问题?这些技术是否更有效?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但hasOwnProperty()的一个非常干净的替代方法是使用"key" in object。它将返回true / false,具体取决于密钥是否存在。

使用您的代码:

var config_arr = {key1:"val",key2:"val",key3:"val",default:"default val"};
var key = ""; //get value from user input, url param, route path, etc
var assign_val = (key in config_arr ? config_arr[key] : config_arr.default); 

//-- false
console.log("someKey" in config_arr);

//-- true
console.log("key1" in config_arr);

//-- "default val," since you passed an empty string as the key 
console.log(assign_val);

希望有所帮助!