|
|
1
11
检查链条的每个部分:
因为表达式是从左到右求值的,并且在发现false时立即返回,所以不会导致错误。因此,如果“someObj”存在,但“sometObj.something”不存在,它将返回false,并且永远不会对someObj.something.foo执行会抛出错误的测试。 |
|
2
11
要检查是否定义了变量,可以执行以下操作:
正如先生在评论中指出的那样
或者,如果您希望更明确,您可以:
您检查PHP变量的方式也不是很整洁,或者实际上不是最佳实践
编辑
:
|
|
|
3
4
@Scott Evernden和@Andrew Hedges给出了目前为止唯一完全正确的答案。只是做一些像
或
一般来说,检查是否存在的唯一正确方法是
当你有一条长链条时,不需要检查 正确类型/空/未定义/等的步骤。;只要每个中间值都是一个对象(不是碰巧有额外属性的数字、字符串或布尔值),它们的计算结果就会为true。
|
|
4
3
以下内容应该是非常防弹的,但是很麻烦,只有在您事先了解整个链的情况下才有效:
您最好按照Chetan的建议,使用try/catch块:
|
|
|
5
2
比那简单。。
这适用于变量,而不是对象。 |
|
|
6
1
当测试变量是否存在时,不应 使用该名称测试变量。在查找深度嵌套对象的属性和方法时,也会出现同样的情况。 考虑到这一点:
您可以通过对全局范围(在浏览器中是窗口级别)进行测试来解决这个问题,并使用最少的代码。
对全局变量的另一个精细测试是使用内置变量 类型 方法,但如果您必须经常输入,则输入会变得有点乏味。
现在开始测试深层嵌套对象(在JS中经常用作伪名称空间)。
只需为高级编码人员提供最后两个简要说明: 有时在IE中,我注意到,如果我正在测试,那么执行这种类型的查找/存在测试实际上调用了该方法。如:
最后,这些类型的存在查找的一个非常轻微的副作用是,当您将getter应用于该属性时,它实际上会在条件测试期间运行getter。
|
|
7
1
|
|
|
8
0
|
|
|
9
0
将变量名作为字符串传递。例如:
附言:评估是邪恶的。您应该清理str的值,使其仅包含一个变量名,而不是一些任意的可执行代码。留给你做练习吧! |
|
|
10
0
如果需要经常执行此操作,则获取属性(如果该属性存在)并返回未定义属性(否则返回未定义)的函数版本为:
以便:
|
|
|
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 1 年前 |
|
|
Alex · 在轻量级中同时解构和不解构变量 1 年前 |
|
|
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 1 年前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 1 年前 |
|
|
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 1 年前 |