使用 "alert" 和 "confirm" 作为变量名
Using "alert" and "confirm" as variable names
根据 this MDN article 和我能找到的任何其他来源,"alert" 和 "confirm" 不是 JavaScript 中的保留字。为什么它们没有在这里列出,它们在函数体内用作变量名是否安全?
是的,它们不是保留字。
在 ECMAScript 5 中,reserved words 是:
- Keywords:
break
, do
, instanceof
, typeof
, case
, else
, new
, var
, catch
, finally
, return
, void
, continue
, for
, switch
, while
, debugger
, function
, this
, with
, default
, if
, throw
, delete
, in
, try
.
- Future Reserved Words:
class
, enum
, extends
, super
, const
, export
, import
.并且,在严格模式下,implements
、let
、private
、public
、yield
、interface
、package
、protected
, static
.
- Null Literals:
null
- Boolean Literals:
true
, false
.
由于 alert
和 confirm
是标识符名称并且不是保留字,因此它们是标识符。因此,它们可以安全地用作变量名。
var alert = 1,
confirm = 2;
document.body.innerHTML = alert + confirm; // 3
您可以覆盖这些功能,没有什么能阻止您。
如果您有自定义对象或函数:
var obj = { alert: 1, confirm: 2};
function func(){
var alert = 1;
var prompt = 2;
}
这不是问题。
但是,如果您重写 window 对象上的实际 alert
或 confirm
函数,并且包含依赖于该函数的库,则可能会遇到麻烦。
为了禁用烦人的 alert()
框,这可能很有用。
因为不是保留字,所以没有列出。
alert
和 confirm
是 window
对象上的函数,它是浏览器中的全局范围。因为它是全局的,所以您可以将其属性作为裸词引用。
//Equivalent
window.alert('test');
alert('test');
您可以在函数内部安全地使用它们。这样做会隐藏 bare use,但您仍然可以调用 window.alert()
来访问它们。
它们不是保留字,因为它们是 "global"("window" 的属性)函数。
为它们赋值将导致它们在相同范围内失去功能,例如:
alert = "sdfsdf";
...
alert("something");
将导致错误,例如 "TypeError: alert is not a function"。
只要您用 var
声明它们,就可以安全地在函数体内使用它们。如果您不使用 var 声明它们,那么您将在全局 (window) 范围内覆盖它们,这可能会导致很多问题。
根据 this MDN article 和我能找到的任何其他来源,"alert" 和 "confirm" 不是 JavaScript 中的保留字。为什么它们没有在这里列出,它们在函数体内用作变量名是否安全?
是的,它们不是保留字。
在 ECMAScript 5 中,reserved words 是:
- Keywords:
break
,do
,instanceof
,typeof
,case
,else
,new
,var
,catch
,finally
,return
,void
,continue
,for
,switch
,while
,debugger
,function
,this
,with
,default
,if
,throw
,delete
,in
,try
. - Future Reserved Words:
class
,enum
,extends
,super
,const
,export
,import
.并且,在严格模式下,implements
、let
、private
、public
、yield
、interface
、package
、protected
,static
. - Null Literals:
null
- Boolean Literals:
true
,false
.
由于 alert
和 confirm
是标识符名称并且不是保留字,因此它们是标识符。因此,它们可以安全地用作变量名。
var alert = 1,
confirm = 2;
document.body.innerHTML = alert + confirm; // 3
您可以覆盖这些功能,没有什么能阻止您。
如果您有自定义对象或函数:
var obj = { alert: 1, confirm: 2};
function func(){
var alert = 1;
var prompt = 2;
}
这不是问题。
但是,如果您重写 window 对象上的实际 alert
或 confirm
函数,并且包含依赖于该函数的库,则可能会遇到麻烦。
为了禁用烦人的 alert()
框,这可能很有用。
因为不是保留字,所以没有列出。
alert
和 confirm
是 window
对象上的函数,它是浏览器中的全局范围。因为它是全局的,所以您可以将其属性作为裸词引用。
//Equivalent
window.alert('test');
alert('test');
您可以在函数内部安全地使用它们。这样做会隐藏 bare use,但您仍然可以调用 window.alert()
来访问它们。
它们不是保留字,因为它们是 "global"("window" 的属性)函数。 为它们赋值将导致它们在相同范围内失去功能,例如:
alert = "sdfsdf";
...
alert("something");
将导致错误,例如 "TypeError: alert is not a function"。
只要您用 var
声明它们,就可以安全地在函数体内使用它们。如果您不使用 var 声明它们,那么您将在全局 (window) 范围内覆盖它们,这可能会导致很多问题。