我见过一些人void
在他们的代码中使用运算符.我也在href
属性中看到了这一点:javascript:void(0)
这似乎没有任何好处javascript:;
那么,使用void
运营商的理由是什么?
Cre*_*esh 54
这就是bookmarklet经常将代码包装在void()内部或匿名函数中的原因,该函数不返回任何内容以阻止浏览器尝试显示执行bookmarklet的结果.例如:
Run Code Online (Sandbox Code Playgroud)javascript:void(window.open("dom_spy.html"))
如果您直接使用返回某些内容的代码(在这种情况下是一个新的窗口实例),浏览器将最终显示:
Run Code Online (Sandbox Code Playgroud)javascript:window.open("dom_spy.html");
在Firefox中,上面将显示:
Run Code Online (Sandbox Code Playgroud)[object Window]
Ben*_*Ben 17
undefined
在ES1.3之前,JavaScript中无法直接访问该值.
void <expression>
因此包括运营商以允许访问该值.
它有时很有用,特别是在使用Web API(例如事件处理程序)时,以确保表达式的结果始终如一undefined
.
当undefined
属性被添加到ES1.3中的全局对象时,实用程序void
变得不明显.
因此你的问题.
小智 14
在 JavaScript 中,void
运算符用于显式返回 undefined。它是一元运算符,这意味着只能使用一个操作数。您可以像下面这样使用它?—?独立或带括号。
void expression;
void(expression);
Run Code Online (Sandbox Code Playgroud)
让我们看一些例子
void 0; //returns undefined
void(1); //returns undefined
void 'hello'; //undefined
void {}; //undefined
void []; //undefined
void myFunction();
void(myFunction());
Run Code Online (Sandbox Code Playgroud)
如果你问为什么你需要一个特殊的关键字来返回 undefined 而不是仅仅返回undefined
:原因是在 ES5 之前你实际上可以命名一个全局变量undefined
,像这样:var undefined = "hello"
or var undefined = 23
,并且大多数浏览器会接受它;undefined
没有承诺标识符实际上是未定义的¹。因此,要返回实际的未定义值,使用了void
操作符 is/was。虽然它不是一个非常受欢迎的运算符,并且很少使用。
让我们看一个带有 void 的函数示例,
//just a normal function
function test() {
console.log('hello');
return 2;
}
//lets call it
console.log(test()); //output is hello followed by 2
//now lets try with void
console.log(void test()); //output is hello followed by undefined
Run Code Online (Sandbox Code Playgroud)
void
丢弃函数的返回值并显式返回 undefined。
您可以从我的教程帖子中阅读更多内容:https : //josephkhan.me/the-javascript-void-operator/
¹ 在 ECMAScript 5 及更高版本中,全局变量undefined
保证是未定义的(ECMA-262 第 5 版,第 15.1.1.3 节),尽管内部作用域内的变量仍然可以被命名undefined
。
Ala*_*orm 11
考虑以下:
<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>
<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>
<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />
Run Code Online (Sandbox Code Playgroud)
第一个链接将交换文本字段的值.第二个链接将打开一个带有"one fish"文本的新页面.如果你使用a javascript: link
,表达式返回null
or之外的其他内容undefined
,浏览器会将其解释为链接应该执行的操作.通过将所有表达式/状态包装在void()
函数中,可以确保运行整个代码片段.目前,这主要用于Bookmarklets,因为使用onclick
属性,或在单独的Javascript块/文件中设置事件处理程序是"常态".
至于javascript:
vs. javascript:void()
,第一个陈述含糊不清.你说,"嘿,我想运行一些javascript",但是你没有提供任何代码.浏览器应该在这里做什么并不一定清楚.使用第二个语句,你会说"嘿,运行一些javascript",你的代码最终返回undefined,浏览器知道这意味着"什么都不做".
既然我在这里,我也会指出,大多数关心加价的人都使用javascript:
或者javascript:void();
已经失宠了.更好的办法是让你的onclick处理程序返回false,并将链接指向一个页面/资源,这对于关闭了javascript或使用NoScript等javascript阻止程序的人来说是有意义的.
归档时间: |
|
查看次数: |
17331 次 |
最近记录: |