给出这段JavaScript代码......
var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';
var f = a || b || c || d || e;
alert(f); // 4
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下这种技术的用途(我最好的猜测是在这个问题的标题中!)?它是如何/为什么它正常工作?
我的理解是变量f将被赋予第一个变量的最近值(从左到右),该变量的值不是null或未定义,但是我没有设法找到关于这种技术的很多参考资料并且有看到它用了很多.
此外,这种技术是否特定于JavaScript?我知道在PHP中做类似的事情会导致产生f一个真正的布尔值,而不是d它自身的值.
我在jQuery.form.js源代码中看到了这一行:
g && $.event.trigger("ajaxComplete", [xhr, s]);
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是wtf ??
我的下一个想法是,我无法确定这是丑陋还是优雅.
我不是一个Javascript大师,所以我的问题是2倍.首先,我想确认我理解正确.以上行是否相当于:
if (g) {
$.event.trigger("ajaxComplete", [xhr, s]);
}
Run Code Online (Sandbox Code Playgroud)
其次是Javascript中常见/接受的做法?一方面它很简洁,但另一方面,如果你以前没见过它,它可能有点神秘.
为了保护我的代码不被访问我使用的未声明的变量
if (typeof myVar != 'undefined')
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想在其中粘贴另一个if语句.像转换这个:
if (typeof myVar != 'undefined'){
if (myVar == "test"){}
}
Run Code Online (Sandbox Code Playgroud)
对此:
if (typeof myVar != 'undefined' && myVar == "test")
Run Code Online (Sandbox Code Playgroud)
考虑myVar可能是未定义的,这个最后的代码在每种使用情况和每个浏览器中都是安全的吗?
内部的各种语句是否可能if ()不按照它们编写的顺序进行评估?
我可以假设myVar == "test"将永远如果被执行myVar未定义?
我遇到了这段代码:
<a ng-click= "item.statusId !== itemStatus.in || transfer()">
Run Code Online (Sandbox Code Playgroud)
我想我们可以概括为:
<element ng-click = "someVar !== someValue || doStuff()">
Run Code Online (Sandbox Code Playgroud)
然后我发现这篇文章是关于短路的,另一篇是关注的文章,一旦我知道它们被称为什么.但是,我仍然没有得到它.
如果第一个语句的计算结果为true,它是否基本上符合OR语句结束评估的原则?因此,如果第一个语句为真,则结束评估,如果为false,则在OR语句的后半部分运行该函数?(这是我要问的主要问题,其他一切都是额外的).
我想我得到的部分是编译器是否以不同方式解释此代码,或者它仍然计算为false并且只运行该函数.甚至不确定如何短语Q.
我在 Chrome 上的控制台上测试了一些东西,然后我运行了这段代码:
alert() | window.confirm();
alert() || window.confirm();Run Code Online (Sandbox Code Playgroud)
我的问题是在一行中同时运行 alert 和 confirm 方法而不使用分号。事实证明,两者 | 和 || 有效,我无法想象它为什么有效,首先是因为|| 表示一个 OR 运算符,它应该运行其中一个,而不是两者,其次| 我不知道它是什么。有人可以解释发生了什么,还有什么应该起作用而不是; ?
当我决定用经典的javascript构建普通的web表单验证时,我有一个奇怪的错误.输入文本字段有几个"onblur"处理程序和一个"form-submit"处理程序.
当我像这样使用它们时:
function loginCheck() {
... return true of false
}
function passwordCheck() {
...
}
function formValidation() {
return loginCheck() && passwordCheck();
}
Run Code Online (Sandbox Code Playgroud)
它没有像我期望的那样工作:如果loginCheck失败,"passwordCheck"从未调用过!
最后我有解决方法
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok;
}
Run Code Online (Sandbox Code Playgroud)
现在执行密码检查.但是当我选择时:
function formValidation() {
ok = loginCheck();
ok = ok && passwordCheck();
return ok;
}
Run Code Online (Sandbox Code Playgroud)
如果loginCheck失败,则不会再次调用passwordCheck.
此外:loginCheck和passwordCheck返回布尔值,但是&=运算符将其转换为"0"或"1"."0"对我的onsubmit="return checkForm"处理程序不起作用.我必须再次将我的&=结果转换为布尔值:
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok != 0;
}
Run Code Online (Sandbox Code Playgroud)
这是javascript引擎的正常行为?
我最近遇到了一些看起来像这样的Javascript代码:
var foo = 'blah';
bar = function(){
// append some content to the body
}
doStuff = function(){
if(somethingIsTrue){
// do something
} else {
// do something else
}
foo && bar();
}
doStuff();
Run Code Online (Sandbox Code Playgroud)
foo && bar()表达式以"undefined"的形式登录到控制台.
我明白为什么它可以调用bar函数从doStuff函数内部运行,但为什么它被用作foo变量的比较表达式?
最近,我注意到,在两个函数之间放置一个或运算符,只有当运算符的第一边为假时才会使第二个函数运行.使用它代替if语句是否安全?
例:
function a(){ return Math.random() >= 0.5; }
function b(){ console.log("foo"); }
Run Code Online (Sandbox Code Playgroud)
运用
!a() || b();
具有相同的行为
if( a() ) b();
Run Code Online (Sandbox Code Playgroud)
我的问题是:使用这种语法是否安全?有例外吗?
我不明白如何&&,||并且!工作...与bool和其他数据类型.你怎么用它们?
当我尝试访问不存在的属性时,为什么javascript不会抛出类型错误?
我的代码如下
var array = [];
var someBoolean1 = array[0] && array[0].hey;
Run Code Online (Sandbox Code Playgroud)
someBoolean的值结果是'undefinded'; 我希望javaScript会抛出一个类型错误;
当我做
var array = [];
var someBoolean2 = array[0].hey;
Run Code Online (Sandbox Code Playgroud)
按预期抛出typeerror.
但我不明白为什么第一个代码块中没有类型错误.任何的想法?
在JavaScript中给出这两个函数:
function (){
return _.includes(someLongArray, value) && someSimpleValue;
}
Run Code Online (Sandbox Code Playgroud)
VS
function (){
return someSimpleValue && _.includes(someLongArray, value);
}
Run Code Online (Sandbox Code Playgroud)
哪些会有更好的表现?如果someSimpleValue为false,是否会自动调用返回?或者它是要验证第二个是真还是假(无用因为当&&有一些是假的时候它不再是真的)
javascript ×11
angularjs ×2
comparison ×1
expression ×1
if-statement ×1
node.js ×1
or-operator ×1
variables ×1