psy*_*tor -4 javascript jquery
使用短路OR运算符来测试是否设置了函数参数(对象)的属性是否安全?
另外,|和之间有什么区别||吗?(两个都工作)
最后,我理解(认为)它只检查左侧是否为空,未定义或其他任何东西 - 是吗?
Javascript,jQuery
$(document).ready(function()
{
var testObject =
{
testProperty: "test string 1"
};
testFunction(testObject);
});
function testFunction(testObject)
{
var testOutput = testObject.testProperty || "test string 2";
console.log(testOutput);
}
Run Code Online (Sandbox Code Playgroud)
使用短路OR运算符来测试是否设置了函数参数(对象)的属性是否安全?
如果你知道它正在做什么,那么使用这个奇特强大的||运算符 是安全的:它正在测试一个假值.的falsey值是,,,,,当然; 其他一切都是真实的.nullundefined0""NaNfalse
因此,如果属性不能将其中一个作为有效值,那么它是安全的,如果可以的话.
因此,在您的情况下,如果testObject.testProperty可以具有""(例如)的有效值,则无法使用||.
因为当你不能使用时||,你有几个选择:
in,检查对象及其原型:
var testOutput = 'testProperty' in testObject ? testObject.testProperty : "test string 2";
Run Code Online (Sandbox Code Playgroud)hasOwnProperty,它只检查对象而不是它的原型:
var testOutput = testObject.hasOwnProperty('testProperty') ? testObject.testProperty : "test string 2";
Run Code Online (Sandbox Code Playgroud)另外,
|和之间有什么区别||吗?(两个都工作)
是的,这是一个巨大的差异; 和不,|不适用于您的示例代码.|是按位 OR运算符,它将其操作数转换为数字(特别是32位整数),在位级别将它们与OR运算组合,然后将其转换回JavaScript编号,并将其转换为结果.undefined | "test string 2"是0,例如,而当然undefined || "test string 2"是"test string 2".
最后,我理解(认为)它只检查左侧是否
null,undefined或其他任何东西 - 是否正确?
不,这是任何虚假的价值.||掩盖细节的逻辑是: