这条JavaScript在没有"use strict";
的情况下运行良好。但是如何检查全局变量是否存在严格模式以及它具有什么类型而不会遇到undeclared variable
错误?
if (!(typeof a === 'object')) {
a = ... /* complex operation */
}
答案 0 :(得分:1)
在严格模式下创建隐式全局变量是一个错误。您必须明确地创建全局:
window.a = ... /* complex operation */
typeof a
应该像以前一样工作。
答案 1 :(得分:0)
问题是你有一个非声明的变量......你必须把它放在第一位:var a = {};
。但是,这就是我检查这些事情的方法。
var utils = {
//Check types
isArray: function(x) {
return Object.prototype.toString.call(x) == "[object Array]";
},
isObject: function(x) {
return Object.prototype.toString.call(x) == "[object Object]";
},
isString: function(x) {
return Object.prototype.toString.call(x) == "[object String]";
},
isNumber: function(x) {
return Object.prototype.toString.call(x) == "[object Number]";
},
isFunction: function(x) {
return Object.prototype.toString.call(x) == "[object Function]";
}
}
var a = ""; // Define first, this is your real problem.
if(!utils.isObject(a)) {
// something here.
}