严格模式下的变量类型对象?

时间:2015-07-21 13:40:57

标签: javascript global-variables typeof strict use-strict

这条JavaScript在没有"use strict";的情况下运行良好。但是如何检查全局变量是否存在严格模式以及它具有什么类型而不会遇到undeclared variable错误?

if (!(typeof a === 'object')) {
    a = ... /* complex operation */
}

2 个答案:

答案 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.
}