Javascript 正在检查没有hasOwnProperty的JSON密钥

Javascript 正在检查没有hasOwnProperty的JSON密钥,javascript,json,Javascript,Json,我有一个基本的JSON键值对象,没有嵌套。如果以下内容没有在任何浏览器中引发错误,我看不到使用hasOwnProperty的意义。有人能指出为什么这是安全的,不安全的,或差与可接受的做法 这是一个在输入为空或属性(键)不存在时设置默认值的示例 没有 var config_arr = {key1:"val",key2:"val",key3:"val",default:"default val"}; var key = ""; //get value from user input, url par

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

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

没有

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);

使用第一种技术有什么问题,其中哪一种更有效?

有几种方法可以做到这一点,但是有一种非常干净的方法可以替代
hasOwnProperty()
在对象中使用
“key”。它将根据密钥是否存在返回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);

希望有帮助

那么,您将在哪里使用hasOwnProperty?为什么?
中的
操作符相对较慢,因此,取决于代码使用它的强度,
hasOwnProperty
可能是或不是更好的解决方案是的,很好。我还是会选择的。我也不完全相信它会像
hasOwnProperty()
浏览器那样受到支持。