Как работает этот код (Девид Фленеган)?

332
17 июля 2017, 17:17

Читая книгу Девида Фленегана наткнулся на такой код

var isArray = Function.isArray || function(o) {
 return typeof o === "object" &&
 Object.prototype.toString.call(o) === "[object Array]";
};

Этот код по смыслу определяет функцию для проверки типа переменной на массив. Но я не понимаю зачем нужна вот эта штука: Function.isArray || . Нуждаюсь в объяснении, в интернете поиски этого не увенчались успехом.

P.S Название для заголовка очень плохое и я понимаю, но ничего не могу с этим поделать.

Update:

  1. Несколько человек тут ответили мол смотри как работает булева логика. Но я знаю как она работает (ленивое вычисление слева направо)
  2. Отдельное спасибо @andreymal он проникся то о чем я и спрашивал.

Update 2:

Вообщем в следующей главе есть такой же код:

Array.join = Array.join || function(a,sep) {
 return Array.prototype.join.call(a,sep);
};
Array.slice = Array.slice || function(a,from,to) {
 return Array.prototype.slice.call(a,from,to);
};
Array.map = Array.map || function(a, f, thisArg) {
 return Array.prototype.map.call(a, f, thisArg);
}

Этот код нужен для того чтобы определить собственные функции? И если они определены не переопределять? Тогда почему не написано так Array.prototype.join ||, Array.slice = Array.prototype.slice ||, Array.map = Array.prototype.map ||?

Answer 1

Оператор || возвращает первый из операндов, булевское представление которого соответствует значению true.

В коде вопроса переменная isArray будет равна Function.isArray, если Function.isArray определена, или function(o) { ... } - в противном случае.

var a; 
var b = 123; 
var c = 456; 
var d = a || b; 
console.log(d); 
var e = b || c; 
console.log(e); 
var f = b || a; 
console.log(f);

Answer 2

Этот код означает, что если есть стандартная функция Function.isArray, то использовать ее, а если такой функции нет, то тогда уже определить собственную функцию для проверки.

READ ALSO
Окончание ресайза окна javascript

Окончание ресайза окна javascript

Если нужно выполнять какой-то код при изменении размера окна браузера, то повесим обработчик события resize на window:

322
Ошибка запуска webpack и webpack-dev-server

Ошибка запуска webpack и webpack-dev-server

Создаю клиентское приложение на React и ReduxИспользую Webpack

351