使用185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:04 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:05 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:05 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:05 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:05 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
185.124.86.73 - - [27/Dec/2016:06:39:05 +0300] "POST /wp-login.php HTTP/1.0" 500 - "-" "-"
的极简单示例如下:
prompt
使用此代码,无论是单击“确定”,还是单击“取消”,或通过单击所有在Chrome开发工具中看到<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<script>
var name = prompt("Please enter your name");
if (name != null) {
console.log('problem!!!');
}
</script>
</body>
</html>
的交叉项来关闭提示框。但是,如果您将problem!!!
更改为其他内容......
name
...然后<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<script>
var randomName = prompt("Please enter your name");
if (randomName != null) {
console.log('problem!!!');
}
</script>
</body>
</html>
仅在您单击“确定”时显示。怎么可能?为什么更改problem!!!
函数的变量名称更改行为?
答案 0 :(得分:3)
你可能正在运行&#34;更好地避免&#34;标识符问题: See here
在Chrome和Edge(14)上尝试将name
设置为prompt
的结果(在esc之后,取消,x)会导致name
设置为字符串{{1而不是"null"
。 IE 11将null
设置为null。
但如果您确实按了OK,则name
将设置为您输入的内容。
其他变量名称实际上被设置为name
作为esc,cancel,x的结果。
答案 1 :(得分:1)
原因是“名称”是全球窗口中悬挂的全球。默认值为“”,不为null。 即使用户点击取消,第一个表单也会定义名称(它根本不会重置它)。 第二种形式使用尚未定义的变量,因此如果取消,它将获得null值。
答案 2 :(得分:1)
name
是window
上的全局变量
并且var name
未重置或重新声明。它仍然引用window.name
。
你无法设置window.name = null
。
DOM会将其设为"null"
,因为它必须与DOM规范中的string
一样。
var name;
console.log( typeof name ); //<- you got "string here"
name = null;
console.log( typeof name ); //<- you still got "string here"
console.log( name ); //<- you got string "null" not null
为避免此问题,ES6会引入let
。
let name;
console.log( typeof name ); //<- you got "undefined"
name = null;
console.log( typeof name ); //<- you got "object"
console.log( name ); //<- you got null as expected.
有关详细信息What's the difference between using "let" and "var" to declare a variable?
,请参阅此处答案 3 :(得分:0)
您在此处创建全局范围内的name
变量,但name
范围内已存在window
属性,这是默认范围。您可以使用
Object.getOwnPropertyDescriptor(window, 'name')
在这里,您可以看到该名称有自己的getter
和setters
,因此即使您为其指定任何值,其setter也会将其转换为字符串。因此
name = 34; // will save '34' to it not Integer
第二种情况randomNumber
变量未在global
或window
范围内定义,因此按预期工作。
在你的情况下name
被设置为null
但被保存为string
,即
name; // 'null'
因此,if
未正确执行。
有关name
的{{1}}属性的更多信息,请阅读here。