Почему вывод 0 здесь.var a = 7;a.constructor (); - PullRequest
5 голосов
/ 13 мая 2019

Давайте рассмотрим примеры ниже:

Q1: Почему здесь вывод 0?Что это значит?

var a = 7;
console.log(a.constructor()); // prints 0 (Why?)

Q2: Когда typeof a и typeof 7 оба числа, почему a.constructor() работает, тогда как 7.constructor() нет?

var a = 7; 
var bool = typeof a === typeof 7;

console.log(a.constructor()); // 0
console.log((++a).constructor()); // 0

console.log(7.constructor()); // SyntaxError: Invalid or unexpected token
console.log(++a.constructor()); // ReferenceError: Invalid left-hand side expression in prefix operation

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

Q1: почему здесь вывод 0? Что это значит?

a.constructor - это Number, и вы вызываете его с первым аргументом undefined. Потому что Number() возвращает undefined, поэтому x.constructor() возвращает undefined. Если аргумент Number() не передается, возвращается 0

var a = 5;
console.log(a.constructor === Number)
console.log(Number())

Когда typeof a и typeof 7 оба числа, почему a.constructor () выполняется, а 7.constructor () - нет?

На самом деле 7. само по себе число. Здесь . работает не как точка, а как десятичная точка, поскольку цифры после десятичной точки являются необязательными.

Решение:

Существуют разные способы прямого доступа к методу числа.

console.log(5..constructor)
console.log((5).constructor)
console.log(5 .constructor)
1 голос
/ 13 мая 2019

Q1: почему выход 0 здесь?Что это значит?

Существует метод конструктора для определения типа переменной (см. Пример)

var a = 7;
console.log(a.constructor == Number);

var b = new Object;
console.log(b.constructor == Number);
console.log(b.constructor == Object);

Q2: Когда typeof a и typeof 7 оба числа, почему a.constructor () выполняется, а 7.constructor () -?

Потому что точка после 7 обрабатывается как десятичная дробь и поэтому выдает ошибку, потому что constructor() не является числом.Код ниже исправит это (даже если это не имеет смысла):

console.log((7).constructor())
1 голос
/ 13 мая 2019

Q1: поскольку номер js является объектом и имеет метод constructor (который возвращает 0, если параметр не указан)

Q2: потому что первая точка интерпретируется js как десятичная точка, но попробуйте

console.log( 7..constructor() );
...