如何创建一个函数来检查javascript中对象的属性,并设置它是否为';它不在那里
我有这个密码如何创建一个函数来检查javascript中对象的属性,并设置它是否为';它不在那里,javascript,function,object,Javascript,Function,Object,我有这个密码 var suitcase = { shirt: "Hawaiian" }; var checkProp = function(obj, prop, val){ if(obj.hasOwnProperty(prop)){ console.log(obj.prop); } else { obj.prop = val; console.log(obj.prop); } }; checkProp("suitcase","shorts","blue");
var suitcase = {
shirt: "Hawaiian"
};
var checkProp = function(obj, prop, val){
if(obj.hasOwnProperty(prop)){
console.log(obj.prop);
} else {
obj.prop = val;
console.log(obj.prop);
}
};
checkProp("suitcase","shorts","blue");
当我运行它时,它返回undefined。表面上看很好。没有语法问题或类似的问题。我需要做些什么才能让它工作?
行李箱
是一个变量,而不是字符串。相反,它应该是
checkProp(suitcase,'shorts','blue');
传递
对象本身,而不是其名称:
checkProp(suitcase,"shorts","blue");
另外,使用obj[prop]
代替obj.prop
(使用obj.prop
,您访问的是对象的prop
属性,而不是您要查找的属性。)
除此之外,您的代码可以正常工作。但可以这样缩短:
var checkProp = function(obj, prop, val){
obj[prop] = obj[prop] || val; // If obj[prop] exists, set it to itself (does nothing), otherwise, set it's content to `val`.
console.log(obj.prop);
};
您想要的可能是obj[prop]而不是obj.prop您有一些不同的选择,但我认为您的解决方案可能会奏效。它只是有一个小错误。在调用函数时:
checkProp('suitcase', 'shorts', 'blue);
当“行李箱”应该是对象时,您将其定义为字符串。试着把它修好,看看能不能用
编辑:
您可以尝试的另一个选项是:
var checkProp = function(obj, prop, val){
if(obj) {
if(!obj[prop]) {
obj[prop] = val;
}
if(window.console && window.console.log) {
console.log(obj[prop]);
}
}
};
如果prop
在obj
prototype上,他只检查对象本身上的道具,那么他实现它的方式就行不通了。哪些浏览器不支持console/console.log
,您必须检查它?o、 这似乎有点超出了这个问题的范围。我喜欢你的功能。更简洁一点。我的职责相当冗长。另外,您还检查了您的函数是否支持登录到控制台,这是一件非常有用的事情。@Cerbrus我在IE 9上遇到了问题。调试器不会自动附加,如果我没有打开开发工具,它会抛出一个错误。这只是一张额外的支票。这有点超出范围,但我更愿意发布一个适用于所有浏览器的答案。也可能是我的设置有点不同。“不管怎样,安全总比后悔好。”乔纳森谢谢。我不认为你的解决办法冗长。它肯定是从那时起制造的,我想它工作得很好。我只是厌倦了console.log抛出一个错误(感谢IE 9),现在我通常会将它包装起来以确保正确。在控制台中看到红色错误文本从来都不是一件好事:P
var suitcase = {
shirt: "Hawaiian"
};
var checkProp = function(obj, prop, val){
if(obj.hasOwnProperty(prop)){
console.log(obj[prop]);
} else {
obj[prop] = val;
console.log(obj[prop]);
}
};
checkProp(suitcase,"shorts","blue");