Существует 5 оригинальных значений в JS, 6 типах судейства и 9 нативных встроенных конструкторов.
Это 569 формирует основу языка JS.
5 оригинальных значений: числа, символы, логические, нулевые, неопределенные
TypeOf может судить: числа, символы, логические, объект, функция, неопределенные. Обратите внимание, что нулевые и массивы, типа обоих выходных объектов.
Тип не может различать массивы и объекты. Как судить типы? Используйте object.prototype.tostring.apply ().
if (value && typeof value === 'Object' && value.constructor === Array)
Если приведенное выше обнаружение создается в разных кадрах и окнах, будет дано FALSE, а объект Window будет отличаться.
Надежный метод - if (object.prototype.tostring.apply (value) === "[object array]")
Аргументы массив не является массивом, это просто объект с атрибутом члена длины.
Как показано в следующем примере, аргументы не являются обычными массивами
Кода -копия выглядит следующим образом:
var a = function () {
var b = object.prototype.tostring.apply (аргументы);
console.log (b);
}
a (); // output [object Arguments]
Кода -копия выглядит следующим образом:
var a = function () {
var c = [];
var b = object.prototype.tostring.apply (c);
console.log (b);
}
a (); // Выход [массив объектов]
Как экземпляр определяет, является ли экземпляр экземпляром
Свойства в прототипе имеют конструктор.
Свойство прототипа по умолчанию - это объект объекта, который можно установить на любое сложное значение, игнорируйте настройку исходного значения.
Хотя он все объект, он особенный, а круговая цепь связывает каждый экземпляр с свойством прототипа своего конструктора. Существует скрытая связь между экземпляром и атрибутом прототипа конструктора, который является __proto __proto. В то же время атрибут конструктора экземпляра получается через конструктор конструктора прототипа функции конструктора.
Тем не менее, мы должны сохранить конструктор, чтобы новый экземпляр мог иметь атрибут конструктора, и мы также можем использовать экземпляр для суждения.
Кода -копия выглядит следующим образом:
var foo = function () {}
Foo.prototype = {constructor: foo}
var fooNstance = new Foo;
PooNstance .__ Proto __ === foo.prototype; // true
FooNstance.constructor === foo; //истинный
Фактически, экземпляр суждения основан не на конструкторе, а на цепочке прототипа, как показано в следующем примере
Кода -копия выглядит следующим образом:
var foo = function () {};
Foo.prototype = {};
var fooNstance = {};
Pooinstance .__ Proto __ = foo.prototype;
console.log (Instance ExanceOf foo); // true
Используйте исходные значения, без конструкторов
Какие значения являются ложными: ложными, "", null, 0, -0, nan, неопределенные, они ложны, другие истины
Но обратите внимание на следующий пример
Кода -копия выглядит следующим образом:
var a = boolean (false);
var b = new Boolean ("");
if (a) {console.log (a);} // невозможно вывести
if (b) {console.log (b);} // boolean {[[primitivevalue]]: false} Новый эквивалентен объекту, это не ложь
Приведенная выше статья немного более теоретическая, но это основа для языка JavaScript, и вы должны четко понимать его.