чем отличаются объявления Array от new Array
Подскажите в чём отличие объявлений нового массива:
var arr = Array(5); var arr1 = new Array(5); console.dir(arr); // Array[0] console.dir(arr1); // Array[0] В обоих __proto__ имеет одинаковые свойства и методы. Какое объявление лучше использовать и для чего? Спасибо! |
отличается более короткой записью, ее и используйте.
|
т.е. я так понимаю что разницы никакой и в :
var obj = new Object(); var obj1 = Object(); console.log(obj); // Object {} console.log(obj1); // Object {} ... потому как такое объявление объектов так же идентично |
лучше через литералы.
var obj = {}, arr=[]; |
По сути при инициализации переменной (var a = b) ты вызываешь конструктор который создает и встраивает переменную в текущий контекст. new отличается тем что на каждый вызов создает новый объект (на который указывает this) а "Object()" это вызов функции которая возвращает результат. В современных браузерах очень хорошие оптимизаторы которые не делают лишних движений без необходимости по этому разница не заметна и в скомпилированном коде ее нет.
Подробнее читай про конструкторы. Результат работы тот же но работают эти механизмы по разному. |
Немножко не в тему, но в качестве прикола.
Код, которым можно свести с ума программиста на C/C++ var a = Boolean(false); if( a ) console.log( "a=true" ); else console.log( "a=false" ); var b = new Boolean(false); if( b ) console.log( "b=true" ); else console.log( "b=false" ); // a=false // b=true |
vitek-82,
такое поведение, как у Array или Object, достигается простым трюком: function Func() { if (!(this instanceof Func)) { return new Func(); } // дальше работа конструктора } в условие попадает случай вызова Func(), без new бытует мнение, что если функция будет работать только как конструктор, то желательно сделать именно так, тогда new будет необязательно. |
Цитата:
Я вот товарищу перегрузил операторы + и - и по полнолуниям нельзя было складывать или вычитать единицу из целых чисел. А ты про приведение типов )). |
Цитата:
|
Плюсовик сам может смутить кого угодно вот таким вот присваиванием :)
func() = 123; |
Часовой пояс GMT +3, время: 03:41. |