Hack Javascript Определения для "неопределенных" объектов - PullRequest
1 голос
/ 07 октября 2010

, поэтому я не совсем уверен, что это возможно, но мне любопытно, можно ли взломать определения «неопределенных» объектов.Прежде всего, цель этого - предотвратить запуск ошибок при выполнении .replace для объекта, который не определен.Можно ли зайти в «бэкэнд» (есть ли такая вещь ??) и добавить метод к неопределенному объекту (если он вообще определен в первую очередь ??).По сути, что-то вроде

undefined.prototype.replace = function(v,r){ return false };

Очевидно, что это работает со строкой или объектом, но неопределенное, по-видимому, по своей природе не имеет определения.Но такое чувство, что вы все еще можете возиться с этим, поскольку в javascript он доступен как конечный результат.

Спасибо за ваше время!Мне действительно любопытно, что всплывет здесь!

РЕДАКТИРОВАТЬ: Основная проблема заключается в том, что я участвую в совместной разработке с 8 другими разработчиками с контролем версий, а также с некоторыми из новых людей, которые приходят на помощь.t знакомый javascript (или хорошая обработка ошибок в этом отношении), поэтому я хотел создать глобальный обработчик для мелких ошибок, который может при необходимости получать возврат по умолчанию.Не похоже, что эта идея будет работать.Может быть, глобальный сценарий «поймай и поймай»?

Ответы [ 3 ]

1 голос
/ 07 октября 2010

4.3.2 примитивное значение

член одного из типов Undefined, Null, Boolean, Number или String as определено в пункте 8.

ПРИМЕЧАНИЕ Примитив значение представляет собой данные, которые представлены непосредственно на самом низком уровне языковая реализация.

4.3.10 Неопределенный тип

тип, единственным значением которого является неопределенное значение.

Как видите, undefined - это примитивное значение , и поэтому вы не можете определить свойства для него. Потому что это не объект . Лучший способ думать об этом, как null. Единственное отличие состоит в том, что null означает преднамеренную пустоту, а undefined является значением и типом по умолчанию для тех переменных, которые еще не определены.

0 голосов
/ 07 октября 2010

Это может работать в некоторых браузерах сейчас, но я бы не стал этого делать.Более ранние спецификации ECMAScript были немного неясными относительно точной природы undefined, но ECMAScript 5 явно описывает undefined только для чтения.Лучшим подходом является проверка, если значение не определено:

if (x !== undefined) {
    // OK
} else {
    // do nothing/set default value/skip
}
// alternate approach:
if (typeof x != "undefined") {
    // OK
} else {
    // do nothing/set default value/skip
}

Обратите внимание, что в первом случае вы должны использовать !== или ===, потому что некоторые странные случаи, например undefined == null, возвращают true.1009 *

0 голосов
/ 07 октября 2010

undefined сродни нулю;это не объект с прототипом, который будет перезаписан.Я не думаю, что вы можете сделать это с помощью кода js - вам придется изменить способ обработки определенных интерпретаторов js неопределенным.И это в основном меняет javascript.

для вашего конкретного примера не получения ошибок при вызове метода для undefined;Почему вы хотите это сделать?Даже если это возможно, вы просто маскируете ошибку в своем коде и, возможно, позже произойдет что-то худшее.

Вы всегда можете сделать

var obj = getObj()

if (obj && obj.replace) obj.replace()...

для защиты от неопределенных ошибок ...

Существуют ли языки, позволяющие вызывать метод с неопределенным значением без ошибки?

...