Цитата:
Цитата:
|
Гражданин, я ни с кем из присутствующих не переходил на личности и не высказывал своё мнения о чьей либо компетенции.
Попрошу и вас воздержаться. Хотя "вы" разрешаю писать с маленькой буквы. Вы продолжаете отвечать на вопросы "почему так?" ответом "потому что так". На вопрос "почему таков стандарт" - "потому что так написано в стандарте". |
/me Достал попкорн и наблюдает "у кого больше" :)
|
Цитата:
по моему все есть в этом блоге который я перечитал http://dmitrysoshnikov.com/ |
Цитата:
Думаю, люди, которые программируют на JS, сами могут сделать выводы о том насколько хорош язык и насколько он подходит для решения их задач. |
Цитата:
С чем наконец то начинают соглашаться и сами разработчики: http://wiki.ecmascript.org/doku.php?...ny:typeof_null |
Цитата:
Так можно пример с АДОМ типов данных и работой оператора typeof ? |
Цитата:
Но он мне нравится, как мой рабочий инструмент, а не как объект боготворения. И мне кажется вы слишком близко к сердцу принимаете нашу беседу. |
Цитата:
Я в первом же ответе после вашего сообщения предложил подумать над простейшей функцией. В ней нужно определять типы переменных. И задача эта не такая простая как с первого взгляда кажется. |
Всем спокойной ночи, пусть у всех всё будет хорошо.
|
Цитата:
Приведи пример где что-то работает адово и неправильно? А то я что-то вообще не понимаю о чем ты? Может тебе прсто стоит почитать учебник для начинающий если тебе что-то кажется трудным? Или спецификацию. А лучше напиши мне я тебе на вопросы отвечу и побьясню что как работает чтобы не казалось адовым. я же помочь хочу. Если ты не пришлешь пример с кодом где у тебя возникают проблемы и адовый дискомфорт, то будем считать что это просто твоя нубоватость его вызывает). И тебе просто нужно подучиться. И набраться опыта. ![]() |
Mахmaxmaximus, твой съезд на личности не добавляет авторитета твоим сообщениям.
Попробую пояснить в последний раз - я понимаю как и что работает, безо всяких объяснений. Меня не до конца нравится как именно это работает. |
Цитата:
Они могут быть связанными с твоим незнанием с нубоватостью! Либо с языком. Вот я и просил пример кода чтобы обьяснить что да как. Просто у меня адовости же нет, я бы и хотел чтобы у тебя её не было. |
Проблемы есть у всех, но мы здесь обсуждаем не их, а typeof.
"Адовость" в том, что чтобы написать простую функцию требуется множество выкрутасов с последующей отладкой во всех браузерах. Попробую ещё раз описать её. Нужно проитерировать произвольное входное значение. Для этого нужно соотнести её с одним из трёх семантически различных типов: 1. грубо говоря "словарь": то что итерировать нужно через for..in. 2. список (Array, arguments, HTMLCollection ...), перебираемый последовательным доступом. 3. скаляр, сюда же нужно отнести function, DOMElement, TextNode и другие подобные структуры. хотя они и являются объектами, но работать нужно с их значением, а не набором привязанных свойств. вот если приведёшь реализацию функции, в которой это всё будет сделано просто, элегантно и органично с языком, то я заберу все свои слова назад. |
function each(collection, callback, scope) { var key; for (key in collection) { if (collection.hasOwnProperty(key) { callback.call(scope, collection[key], key, collection); } } } Кроссбраузерность 100%. Я потратил на написание меньше минуты. |
Первое же на вскидку, что могу сказать:
1. Chrome, Opera и Safari в HTMLCollection переберут и свойство length 2. В IE7 у HTMLCollection вообще нет метода hasOwnProperty() - вылетит с ошибкой. 3. 3-й пункт моего примера не обрабатывается. 4. Любое добавленное к массиву или коллекции свойство попадёт в перебор. Пример - перебор jQuery-объекта. |
function each(collection, callback, scope) { var key; for (key in collection) if (collection.hasOwnProperty(key) { callback.call(scope, collection[key], key, collection); } } обманываете это как то связано с javascript? Пример - перебор jQuery-объекта. так ты это и хотел, а если нет, то отвечу так: есть универсальный итератор, я его выше показал, если нужен персональный итератор для определенного класса сущностей то сделай его. |
Добавлять свойства к уже определенным ранее объектам это признак дурного тона, а если Вам было необходимо расширить функционал уже нативных коллекций, тогда следовало бы создать наследника и использовать его в своих нуждах. В таком случае пользовательские свойства не попадают под итерацию.
|
Цитата:
var arr = [1,2,3]; arr.foo = 'bar'; for( var prop in arr ) { arr.hasOwnProperty( prop ) && console.log( prop, arr[prop] ) ; } Для перебора нужно использовать, то что для это предназначено. |
Цитата:
for (var i = 0; i < arr.length; i++), можно ведь написать так? |
Цитата:
|
Цитата:
|
DreamTheater,
просто вы привели код с for in, в который по сути необходимо добавить проверку типов. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Тебе поможет секретное свойство предназначенное для этого) |
Я еще раз всем обьясню:
1)есть типы данных: обьект, строка, число, булиан, андефайнд, function. ВСЕ! 2) тип данных "Обьект" в свою очередь делятся на свои типы(КЛАССЫ): Массивы, DOM элементы, просто обьекты(словари) , jQuery обьекты и.т.п. typeof определяет тип данных! обьект не обьект строка не строка, число ли не число. если ты хочешь оператор который бы возвращал класс обьекта, например "Array" или "DOMelement" то для этого есть специальное волшебное свойство, тебе нужно просто обратится к нему, к свойству в котором лежит строчка с названием класса обьекта. alert([1,2,3,4,5] .constructor.name) alert({a:1} .constructor.name) alert(document.createElement('a') .constructor.name) при чем всё выше по типу данных - обьекты. видишь как все просто)) и операторы не нужны XD |
Прошу прощения за отсутствие, надеюсь не скучали :)
Цитата:
Цитата:
И почему браузеры кладут на этот пункт стандарта? console.log(document.getElementsByTagName("script").constructor.name); console.log(document.createElement("div").constructor.name); console.log(document.createTextNode("text").constructor.name); Firefox 10.0.2, Ubuntu: Цитата:
Цитата:
Насколько помню, там у DOM-объектов раньше вообще конструкторов и прототипов не было. |
Часовой пояс GMT +3, время: 03:08. |