angularjs是否作为$ scope.null处理null?

jpe*_*lli 4 angularjs angularjs-scope

问题的例子

<div ng-show="bar !== null">hello</div>
Run Code Online (Sandbox Code Playgroud)

这是否在范围内评估为

$scope.bar !== null
Run Code Online (Sandbox Code Playgroud)

还是这样?

$scope.bar !== $scope.null
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一种情况下,$ scope.null将是未定义的,并且示例似乎正常工作.

奖金:

如果bar = null则会发生这种情况

// this does not work (shows hello)
<div ng-show="bar !== null">hello</div>
Run Code Online (Sandbox Code Playgroud)

没有给出相同的结果

// this works ok (does not show hello)
<div ng-show="bar != null">hello</div>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

dfs*_*fsq 6

Angular使用高级解析器($ parse service)来处理和评估属性表达式,就好像它们是javascript代码一样.当它工作时,它将null比具有相同名称的范围属性排名更高的优先级.这意味着在表达式中

ng-show="bar !== null"
Run Code Online (Sandbox Code Playgroud)

Angular确实会null视为原始null价值.

但是,可以很容易地指示Angular要使用范围属性而不是null原始属性.在这种情况下,您需要使用括号表示法:

ng-show="bar !== this['null']"
Run Code Online (Sandbox Code Playgroud)

最后的说明.虽然可以用类似的名称使用属性null,undefined等等,我不会因为它的混乱,你需要去用冗长的括号语法推荐它.