Oberon space
General Category => Общий раздел => Тема начата: ilovb от Ноябрь 20, 2012, 06:56:14 pm
-
http://habrahabr.ru/post/159313/
typeof 5; //"number", ок, похоже на правду
typeof "hello"; //"string"
typeof true; //"boolean"
typeof undefined; //"undefined"
typeof {}; //"object". Пока 5 из 5
typeof null; //"object". WTF?
typeof function(){}; //"function". Разве у нас есть тип function?
.....
Вот правильно, что я плюнул на изучение этого гумна.
-
Я большой не любитель js, но немного побуду адвокатом дьявола:
typeof null; //"object". WTF?
А почему бы нет? Собственно я именно что object тут и ожидал увидеть. А что тут может быть еще? Нулевая ссылка же. В жабе будет то же самое. Да и в шарпе.
typeof function(){}; //"function". Разве у нас есть тип function?
Я хз есть ли в js function (в смысле он там отделяется от объекта вообще или нет), но замечу, что вообще говоря, литералы в ЯП не обязаны иметь обычный тип, применимый к переменным. Скажем в Обероне строковый литерал ("Foo") имеет тип который не соответствует ни одному обычному обероновскому типу переменной. Кстати, а какой в Обероне тип имеет NIL? :-D
Так вот - в данном случае у нас функциональный литерал. И тип у него может быть вот такой вот. Необычный.
Вот правильно, что я плюнул на изучение этого гумна.
Оно гумно, но не в этом месте :-)
-
NULL и NIL - это разные вещи. (в сях имхо неудачно название выбрано)
Если в js NULL = NIL, то нафик он вообще нужен в динамическом языке.
NULL обычно означает отсутствие значения, и уменя лично прочно ассоциируется с SQL'ным NULL.
А тип у NULL должон быть NULL :) Иначе весь смысл теряется.
Результат любой операции с NULL должон быть NULL...
-
NULL и NIL - это разные вещи. (в сях имхо неудачно название выбрано)
Если в js NULL = NIL, то нафик он вообще нужен в динамическом языке.
NULL обычно означает отсутствие значения, и уменя лично прочно ассоциируется с SQL'ным NULL.
А тип у NULL должон быть NULL :) Иначе весь смысл теряется.
Результат любой операции с NULL должон быть NULL...
Ничего не понял в этом диком смешании nil'ов c null'ами. NULL как его ни назови, хоть nil'ом, это обычно эдакий недоделанный bottom type (http://en.wikipedia.org/wiki/Bottom_type)
-
Я хз есть ли в js function (в смысле он там отделяется от объекта вообще или нет), но замечу, что вообще говоря, литералы в ЯП не обязаны иметь обычный тип, применимый к переменным.
В JS нет такого типа.
http://ru.wikipedia.org/wiki/ECMAScript#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85
Кстати, а какой в Обероне тип имеет NIL? :-D
В обероне все просто и логично. Там NIL для POINTER как 0 для INTEGER :)
Оно гумно, но не в этом месте :-)
Однако меня тошнить начало как раз на всех этих undefined, null, NaN, undeclared....
-
Я хз есть ли в js function (в смысле он там отделяется от объекта вообще или нет), но замечу, что вообще говоря, литералы в ЯП не обязаны иметь обычный тип, применимый к переменным.
В JS нет такого типа.
http://ru.wikipedia.org/wiki/ECMAScript#.D0.A2.D0.B8.D0.BF.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85
Ну и фик с ним. Открываем доку на typeof, читаем: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof Еще вопросы?
Строковое представление типа вообще никогда волновать не должно. if (typeof foo == "object") писать нельзя никогда, очевидно. Ни в каком языке. Писать надо if (typeof foo == typeof {} ). В этом случае мы не зависим от того какие рюшечки навешают для строкового представления типов.
Кстати, а какой в Обероне тип имеет NIL? :-D
В обероне все просто и логично. Там NIL для POINTER как 0 для INTEGER :)
Нифига себе просто и логично. А для REAL что? А для char? Откровенно говоря, в этом месте С++ уже более строг чем Оберон - там таки есть nullptr, который к интам не приводится.
Оно гумно, но не в этом месте :-)
Однако меня тошнить начало как раз на всех этих undefined, null, NaN, undeclared....
А меня начинает тошнить еще на этапе динамической типизации. Это как голой жопой на мороз.
-
NULL и NIL - это разные вещи. (в сях имхо неудачно название выбрано)
Если в js NULL = NIL, то нафик он вообще нужен в динамическом языке.
NULL обычно означает отсутствие значения, и уменя лично прочно ассоциируется с SQL'ным NULL.
А тип у NULL должон быть NULL :) Иначе весь смысл теряется.
Результат любой операции с NULL должон быть NULL...
Ничего не понял в этом диком смешании nil'ов c null'ами. NULL как его ни назови, хоть nil'ом, это обычно эдакий недоделанный bottom type (http://en.wikipedia.org/wiki/Bottom_type)
В сях нету типа Null. Есть только значение Null для указателей, которые не указывают ни на один объект.
Т.е. это тупо define для нулевого указателя. И как бэ тип мы проверяем у указателя....
В JS есть тип Null, и это уже несколько другое.
Если это "пустой" объект, то нафик он нужен вообще этот Null? Зачем его в язык вводить?
-
NULL и NIL - это разные вещи. (в сях имхо неудачно название выбрано)
Если в js NULL = NIL, то нафик он вообще нужен в динамическом языке.
NULL обычно означает отсутствие значения, и уменя лично прочно ассоциируется с SQL'ным NULL.
А тип у NULL должон быть NULL :) Иначе весь смысл теряется.
Результат любой операции с NULL должон быть NULL...
Ничего не понял в этом диком смешании nil'ов c null'ами. NULL как его ни назови, хоть nil'ом, это обычно эдакий недоделанный bottom type (http://en.wikipedia.org/wiki/Bottom_type)
В сях нету типа Null. Есть только значение Null для указателей, которые не указывают ни на один объект.
Т.е. это тупо define для нулевого указателя. И как бэ тип мы проверяем у указателя....
В JS есть тип Null, и это уже несколько другое.
Если это "пустой" объект, то нафик он нужен вообще этот Null? Зачем его в язык вводить?
Ну, это он был давно тупо дефайном, с тех пор несколько поменялось :-) Особенно в плюсах. (у nullptr есть тип nullptr_t который нифига не int). (алсо в тех сях, где оно тупо дефайн, он конечно же не один такой. C точки зрения типа. )
А как что и зачем - описано по ссылке в вики.
-
Ну и фик с ним. Открываем доку на typeof, читаем: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof Еще вопросы?
Строковое представление типа вообще никогда волновать не должно. if (typeof foo == "object") писать нельзя никогда, очевидно. Ни в каком языке. Писать надо if (typeof foo == typeof {} ). В этом случае мы не зависим от того какие рюшечки навешают для строкового представления типов.
Тык это и странно. Типа нет, но есть хрен знает каким способом полученное строковое представление.
Это вынос мозга если вдуматься.
Почему бы тогда для Array не возвращать строковое представление? :)
-
Ну и фик с ним. Открываем доку на typeof, читаем: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof Еще вопросы?
Строковое представление типа вообще никогда волновать не должно. if (typeof foo == "object") писать нельзя никогда, очевидно. Ни в каком языке. Писать надо if (typeof foo == typeof {} ). В этом случае мы не зависим от того какие рюшечки навешают для строкового представления типов.
Тык это и странно. Типа нет, но есть хрен знает каким способом полученное строковое представление.
Это вынос мозга если вдуматься.
Почему бы тогда для Array не возвращать строковое представление? :)
Не-е, вынос мозга это вот это: http://www.youtube.com/watch?v=kXEgk1Hdze0
:-D