Cor*_*oss 50 javascript syntax logical-operators
我正在重新开始进行Web开发,并且最近一直试图重新审视jscript的细微差别.我正在通过构建在Three.JS之上的THREEx扩展库的源代码,并注意到了这个功能
THREEx.KeyboardState.prototype.pressed = function(keyDesc)
{
var keys = keyDesc.split("+");
for(var i = 0; i < keys.length; i++){
var key = keys[i];
var pressed;
if( THREEx.KeyboardState.MODIFIERS.indexOf( key ) !== -1 ){
pressed = this.modifiers[key];
}else if( Object.keys(THREEx.KeyboardState.ALIAS).indexOf( key ) != -1 ){
pressed = this.keyCodes[ THREEx.KeyboardState.ALIAS[key] ];
}else {
pressed = this.keyCodes[key.toUpperCase().charCodeAt(0)];
}
if( !pressed) return false;
};
return true;
}
Run Code Online (Sandbox Code Playgroud)
我特别关注这里的线路:
if( THREEx.KeyboardState.MODIFIERS.indexOf( key ) !== -1 ){
Run Code Online (Sandbox Code Playgroud)
我不熟悉这个!==运算符.我检查了w3schools,他们的逻辑运算符列表中没有包含这个.我不确定这是否拼写错误,浏览器只是将其视为!=或者它是否有其他含义.另外我想知道这实际上是一个逻辑运算符还是它是某种组合,比如!+ ==?
Wor*_*mbo 90
您也可以使用其他几种动态类型语言查找===
和!==
运算符.它总是意味着这两个值不仅通过它们的"隐含"值进行比较(即,可以转换其中一个或两个值以使它们具有可比性),还可以通过它们的原始类型进行比较.
这基本上意味着如果0 == "0"
返回true,0 === "0"
则返回false,因为您正在比较数字和字符串.同样,while 0 != "0"
返回false,0 !== "0"
返回true.
复制自正式规范:ECMAScript 5.1第11.9.5节
11.9.4严格等于运算符(===)
生产EqualityExpression:EqualityExpression === RelationalExpression的计算方法如下:
- 让lref成为评估EqualityExpression的结果.
- 设lval为GetValue(lref).
- 让rref成为评估RelationalExpression的结果.
- 设rval为GetValue(rref).
- 返回执行严格相等比较rval === lval的结果.(见11.9.6)
11.9.5严格不等于运算符(!==)
生产EqualityExpression:EqualityExpression!== RelationalExpression的计算方法如下:
- 让lref成为评估EqualityExpression的结果.
- 设lval为GetValue(lref).
- 让rref成为评估RelationalExpression的结果.
- 设rval为GetValue(rref).设r是执行严格相等比较rval === lval的结果.(见11.9.6)
- 如果r为true,则返回false.否则,返回true.
11.9.6严格的等式比较算法
比较x === y,其中x和y是值,产生真或假.这样的比较如下进行:
- 如果Type(x)与Type(y)不同,则返回false.
- 类型(x)是未定义的,返回true.
- 类型(x)为Null,返回true.
- 类型(x)是数字,然后
- 如果x是NaN,则返回false.
- 如果y是NaN,则返回false.
- 如果x与y的 Number值相同,则返回true.
- 如果x是+0且y是-0,则返回true.
- 如果x是-0且y是+0,则返回true.
- 返回false.
- 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的长度和字符相同),则返回true ; 否则,返回false.
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true ; 否则,返回false.
- 如果x和y引用同一个对象,则返回true.否则,返回false.
归档时间: |
|
查看次数: |
122629 次 |
最近记录: |