JScript中用于表示未定义的undefined标识符到底是表示什么未定义?它和"undefined"(包括"在内)又有什么区别和联系呢?为什么有的时候可以使用undefined来和变量做比较,而有的时候又不行呢?
underfined和"undefined"的区别大家一眼就能看出来。在一般的认知下,我们认为undefined是JScript提供的一个"关键字",而"undefined"却毫无悬念的就是一个字符串,只是引号内的内容长得和undefined一个样。undefined和"undefined"的区别虽然是十分明显的,但它们的联系也是紧密的。
仔细阅读JScript手册,其实这个underfined是一个"已定义"的Global值,而不是它的字面意义所表达的未定义。我们看下面这个代码示例,很有趣:
<script language="javascript">
alert(undefined);
alert(variable);
script>
The result of execution is:
Let’s slightly modify the above code and add a typeof call to see:
<script language="javascript">
alert(typeof undefined);
alert(typeof variable);
script>
What should the result be now? Display "object" and "undefined"? Of course not, both alert calls will display "undefined".
So undefined is a constant defined by the script engine, which exists after the script engine is initialized. Its actual function is to use to represent the uninitialized state (uninitialized) of a defined variable, such as var i;, then the value of i is undefined, and i is It's actually defined, but it's not initialized. At this time, we can write such an expression to judge i, such as if (i == undefined). If a variable that has never appeared in the code is used, the concept of undefined at this time is not uninitialized as described by undefined, but it means that the variable has not been registered in the context of the script engine at all. middle. If you use a statement like if ( abc == undefined ), you will get an error message similar to the second one in the picture above.
In actual use, if you use typeof to determine whether a variable is undefined, it is fully compatible with both undefined (undefined) and uninitialized (uninitialized) The situation is that I don't like to use if (typeof xxx == 'undefined') in many cases, because literal strings are easy to misspell, which is difficult for me from the perspective of using a strongly typed language that I am used to. It also looks unprofessional.