согласно ecma262-3 8.6.2.6 [DefaultValue]
http://bclary.com/2004/11/07/#a-8.6.2.6
теперь я хочу получить [[DefaultValue]] из [ ]
, поэтому согласно ecma, вот так:
Когда метод [[DefaultValue]] O вызывается с номером подсказки, выполняются следующие шаги:
1. Вызвать метод [[Get]] объекта O с аргументом "valueOf".
[ ].valeOf() => [ ]//сам по себе
2. Если Результат(1) не является объектом, перейдите к шагу 5.
[ ] является объектом
3. Вызовите метод [[Call]] для Result(1) с O в качестве значения this и пустым списком аргументов.
Result(1) => [ ],[ ] не осуществить [[Вызов]]
4. Если Результат(3) является примитивным значением, вернуть Результат(3).
так что Результата(3) нет, или он по-прежнему [ ]
5. Вызвать метод [[Get]] объекта O с аргументом "toString".
[ ].toString => ""
6. Если Результат(5) не является объектом, перейдите к шагу 9.
Результат(5) => "" не является объектом, перейдите к шагу 9
< эм>7. Вызов метода [[Call]] результата(5), с O в качестве значения this и пустым списком аргументов.
8. Если Результат(7) является примитивным значением, вернуть Результат(7).
9. Выдать исключение TypeError.
ошибка? боже!
как получить объект [[DefaultValue]]
Ответы (1)
[[DefaultValue]]
, вызванный для объекта массива, в конечном итоге получает (и вызывает) метод toString
объекта массива. Этот метод по существу представляет собой Array.prototype.toString
, который аналогичен вызову Array.prototype.join
для объекта массива (см. 15.4.4.2). Таким образом, toString
для пустого объекта массива возвращает пустую строку (""
), которая является примитивным значением и поэтому возвращается из внутреннего метода [[DefaultValue]].
Таким образом, [[DefaultValue]] массива является пустой строкой — если Array.prototype.string
не перезаписывается/затеняется, и если Array.prototype.valueOf
не перезаписывается/затеняется.
[]+''; // ""
Array.prototype.toString = function(){return 1};
[]+''; // "1"
Array.prototype.valueOf = function(){return 2};
[]+''; // "2"
person
kangax
schedule
29.04.2011