我有一个基本的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);
使用第一种技术有什么问题?这些技术是否更有效?
答案 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);
希望有所帮助!