如何创建一个函数来检查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");