hh5*_*188 4 javascript properties object
假设我有一个像这样的javascript对象:
window.config
config.UI = {
"opacity": {
"_type": "float",
"_tag": "input",
"_value": "1",
"_aka": "opacity",
"_isShow":"1"
}
Run Code Online (Sandbox Code Playgroud)
如何判断"不透明度"对象是否具有名为"_test"的属性?喜欢
var c=config.ui.opacity;
for(var i in c)
{
//c[i]=="_test"?
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道它是否也被分配了?
T.J*_*der 14
至少有三种方法可以做到这一点; 您使用哪一个很大程度上取决于您,有时甚至是风格问题,尽管存在一些实质性差异:
if..in你可以使用if..in:
if ("_test" in config.UI.opacity)
Run Code Online (Sandbox Code Playgroud)
...因为在测试中使用时(与特殊for..in循环相反),in测试对象或其原型(或其原型的原型等)是否具有该名称的属性.
hasOwnProperty如果要从原型中排除属性(在您的示例中并不重要),您可以使用hasOwnProperty,这是一个所有对象都继承自的函数Object.prototype:
if (config.UI.opacity.hasOwnProperty("_test"))
Run Code Online (Sandbox Code Playgroud)
最后,您可以检索属性(即使它不存在),并通过查看结果来决定如何处理结果; 如果你向对象询问它没有的房产的价值,你会得到回报undefined:
var c = config.UI.opacity._test;
if (c) {
// It's there and has a value other than undefined, "", 0, false, or null
}
Run Code Online (Sandbox Code Playgroud)
要么
var c = config.UI.opacity._test;
if (typeof c !== "undefined") {
// It's there and has a value other than undefined
}
Run Code Online (Sandbox Code Playgroud)
如果可能config.UI根本没有opacity财产,你可以使所有这些更具防御性:
// The if..in version:
if (config.UI.opacity && "_test" in config.UI.opacity)
// The hasOwnProperty version
if (config.UI.opacity && config.UI.opacity.hasOwnProperty("_test"))
// The "just get it and then deal with the result" version:
var c = config.UI.opacity && config.UI.opacity._test;
if (c) { // Or if (typeof c !== "undefined") {
Run Code Online (Sandbox Code Playgroud)
最后一个是有效的,因为&&与其他语言相比,运算符在JavaScript中特别强大; 这是奇怪的强大||运营商的必然结果.