2015-07-21 7 views
0

Этот фрагмент JavaScript прошел отлично без "use strict";. Но как я могу проверить, существует ли глобальная переменная со строгим режимом и каким типом она не работает в ошибке undeclared variable?Переменный тип объекта в строгом режиме?

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

Вы должны определить 'Ā' где-то, прежде чем руки. Возможно, в самом внешнем виде, если вы хотите, чтобы он вел себя как глобальный. –

+0

@Jamen Я нашел решение: http://stackoverflow.com/a/32247052/22470 – powtac

ответ

0

Я нашел действительный способ проверить, существует ли глобальная переменная a без запуска предупреждения в JavaScript.

Метод hasOwnProperty() возвращает логическое значение, указывающее, имеет ли объект указанное свойство.

hasOwnProperty() не вызывает предупреждение, когда имя запрашиваемой переменной не существует в глобальном пространстве!

'use strict'; 
if (!window.hasOwnProperty('a')) { 
    window.a = ... 
    // Or 
    a = ... 
} 

Чтобы убедиться a является использование объекта

'use strict'; 
if (!(window.hasOwnProperty('a') && typeof a === 'object')) { 
    window.a = ... 
    // Or 
    a = ... 
} 
+0

Это очень запутанная альтернатива 'if (typeof (a)! == 'undefined') ...'. –

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. 
} 
+1

Вам даже не нужно явно указывать его значение. Вы можете просто сделать 'var a;' –

+0

Да, вы правы в этом. Я поместил некоторую ценность, потому что, если он проверяет, какая у него переменная, потому что он уже имеет значение ... если не это, то это не имеет смысла. Но, правда, проблема в том, что он никогда не объявляет переменную. –

+0

Я хочу проверить, объявлена ​​ли переменная ИМЯ УЖЕ, и если это объект. – powtac

1

Создание неявных глобалов - это ошибка в строгом режиме. Вы должны создать глобальный явно:

window.a = ... /* complex operation */ 

typeof a должен работать, как и раньше.

+0

Другими словами: нет способа проверить если переменная уже объявлена ​​в строгом режиме? – powtac

+0

Что заставляет вас думать об этом? Я сказал: «' typeof a' должен по-прежнему работать как раньше »*, с которым я имел в виду« нестрогий »режим. Извините, если это не ясно. –

 Смежные вопросы

  • Нет связанных вопросов^_^