2011-12-23 2 views
4

я видел в Крокфорде книжных Javascript: The Good Parts, что он делает TypeOf сравнение, как это:Сравнение типов в Javascript

return typeof a < typeof b ? -1 : 1; 

Я сделал свои собственные тесты, и я думаю, что это «заказ» из различные типы:

function < number < object or array < string < undefined

Это как JS на самом деле делает сравнение?

+1

Почему бы вам нужно проверить, если тип «меньше, чем» другой? Что это вообще значит? Кроме того, 'typeof()' возвращает строку, поэтому это действительно сравнение [lexographic] (http://en.wikipedia.org/wiki/Lexicographic_order). – Chad

+0

@Chad: Вероятно, сортировка значений в массиве по типу с использованием 'Array.prototype.sort'. [Вот пример] (http://jsfiddle.net/6SSZP/) –

+0

@amnotiam Как я уже сказал, он не собирается сортировать, основываясь на некотором старте, но будет сортировать лексикографически по строке типа. – Chad

ответ

4

Оператор typeof возвращает строку. Строка сравнивается по ее числовому значению.

Итак, порядок < сравнение было бы:

type  charCode ("tfnosux".charCodeAt(i)) Example 
boolean  98         true 
function 102         Date 
number  110         123 
object  111         [] 
string  115         "" 
undefined 117         undefined 
xml  120         <x></x> 

tfnosux являются первыми символами типов. Метод charCodeAt возвращает числовой символ charCode символа в JavaScript.

Я добавил пример каждого типа в предыдущем блоке. Большинство разработчиков JavaScript знают о первых типах. Конечный тип, xml, менее известен и может быть получен с использованием typeof по адресу EX4.

Демо typeof: http://jsfiddle.net/9G9zt/1/

+0

Ваш список кажется слегка выключенным - не следует ли 'O' доходить до' S'? – bobbymcr

+0

@bobbymcr Я заметил при вычислении значений числового знака. Он был исправлен;) –

+1

Что такое пример типа данных xml? – qwertymk

1

Это не значение. typeof возвращает строку, а операторы сравнения работают для строк, выполняя «простое лексикографическое упорядочение по последовательностям значений значений кодовой точки».

В принципе, если одна строка начинается с другой, то это больше из двух, в противном случае сравнивается первая позиция символа, которая отличается от двух.

См раздел 11.8.5 на spec

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