JSLint complains about redefining undefined

只谈情不闲聊 提交于 2019-12-06 03:10:56

问题


undefined is technically able to be redefined, so it is not a reserved word. As a result, I usually write code in an anonymous function that forces undefined to be an undefined variable, as so:

(function (undefined) {
    "use strict";
    var o = {
        test: "testvalue"
    };
    if (o.test === undefined) {
        // Do stuff here
    } else {
        // Do other stuff there
    }
}());

However, JSLint mentions the following error:

Problem at line 1 character 15: Expected an identifier and instead saw 'undefined' (a reserved word).

Why does JSLint complain about undefined being an reserved word, when code can arbitrarily redefine the variable? I know that you can use typeof x === "undefined"; I just wanted to see why this method wouldn't work.


回答1:


Your method does work. Just because JSLint doesn't like it doesn't make it a cardinal sin.

Try JSHint instead (for more sanity).




回答2:


'undefined' was declared an immutable property of the global object in ECMA-262 Edition 5 Section 15.1.1.3, published in December 2009.

By using 'undefined' as a parameter name in a function, you are attempting to mutate it with whatever is passed to the function. So technically, the error lies with browsers being slow to adopt the standard, and JSLint is correct.




回答3:


(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

According to MDN, it's actually not a reserved word in JavaScript and could be redefined.




回答4:


undefined is a reserved word. It's like trying to name a variable false or true. Your value you are passing into your function:

function(undefined) {...}

needs to be named something else, like

function(myVariable) {...}

UPDATE

Looks like it might not be actually reserved as I originally read but perhaps it's just a term that JSLint thinks should be reserved...



来源:https://stackoverflow.com/questions/8175673/jslint-complains-about-redefining-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!