Если вы не видите мою предыдущую статью, пожалуйста, сначала прочтите ее, а затем вернитесь сюда: Journey Javascript — Day One

1. Оператор строгого равенства

Оператор строгого равенства состоит из трех знаков равенства: === . Он строго проверяет тип.

“” === “0”          // false
0 === “”            // false
0 === “0”           // false
false === “false”   // false
false === “0”       // false
false === undefined // false
false === null      // false
null === undefined  // false
“ \t\r\n” === 0     // false

2. Нормальный оператор равенства

Нормальный оператор равенства состоит из двух знаков равенства: == . Он не проверяет тип.

“” === “0”          // false
0 === “”            // true
0 === “0”           // true
false === “false”   // false
false === “0”       // true
false === undefined // false
false === null      // false
null === undefined  // true
“ \t\r\n” === 0     // true

3. неопределенный и нулевой

В JavaScript есть два разных значения для ничего: null и undefined. undefined — это тип с ровно одним значением: undefined. Язык также определяет глобальную переменную со значением undefined. Эта переменная также называется неопределенной, и нуль тоже такой же.

Вот несколько примеров, когда возвращается значение undefined:

  • Доступ к (немодифицированной) глобальной переменной undefined.
  • Доступ к объявленной, но еще не инициализированной переменной.
  • Неявный возврат функций из-за отсутствия операторов return.
  • операторы return, которые явно ничего не возвращают.
  • Поиск несуществующих свойств.
  • Параметры функции, которым не передано явное значение.
  • Все, для чего было установлено значение undefined.

4. Оператор удаления

Короче говоря, невозможно удалить глобальные переменные, функции и некоторые другие в JavaScript, у которых установлен атрибут DontDelete.

// global variable:
var a = 1; // DontDelete is set
delete a; // false
a; // 1
// normal function:
function f() {} // DontDelete is set
delete f; // false
typeof f; // “function”
// reassigning doesn’t help:
f = 1;
delete f; // false
f; // 1

Явно установленные свойства могут быть удалены обычным образом.

// explicitly set property:
var obj = {x: 1};
obj.y = 2;
delete obj.x; // true
delete obj.y; // true
obj.x; // undefined
obj.y; // undefined

5.setInterval

setInterval выполняется, блокирует вызов тайм-аута, setInterval по-прежнему будет вызывать дополнительные вызовы указанной функции.

function foo(){
// something that blocks for 1 second
}
setInterval(foo, 100);

Очистка тайм-аутов и интервалов работает путем передачи идентификатора в clearInterval

var id = setTimeout(foo, 1000);
clearInterval(id);

6. Почему бы не использовать eval

Функция eval выполнит строку кода JavaScript в локальной области видимости.

var number = 1;
function test() {
    var number = 2;
    eval('number = 3');
    return number;
}
test(); // 3
number; // 1

Однако eval выполняется только в локальной области видимости, когда она вызывается напрямую и когда имя вызываемой функции действительно eval.

var number = 1;
function test() {
    var number = 2;
    var copyOfEval = eval;
    copyOfEval('number = 3');
    return number;
}
test(); // 2
number; // 3

7.Автоматическая вставка точки с запятой

JavaScript не является языком без точки с запятой. Фактически, точка с запятой нужна для понимания исходного кода. Поэтому синтаксический анализатор JavaScript автоматически вставляет их всякий раз, когда обнаруживает ошибку синтаксического анализа из-за отсутствия точки с запятой.

var add = function() {
} // parse error, semicolon expected
add()

Происходит вставка, и синтаксический анализатор пытается снова

var add = function() {
}; // no error, parser continues
add ()

8.Экземпляр оператора

Оператор instanceof сравнивает конструкторы своих двух операндов. Это полезно только при сравнении объектов, изготовленных на заказ. Используется на встроенных типах, это бесполезно.

new String('test') instanceof String; // true
new String('test') instanceof Object; // true
'test' instanceof String; // false
'test' instanceof Object; // false

9. имеет собственное свойство

hasOwnProperty проверяет, что объект имеет свойство, определенное для него самого, а не где-то в его цепочке прототипов.

// Poisoning Object.prototype
Object.prototype.bar = 1;
var test = {goo: undefined};
test.bar; // 1
'bar' in test; // true
test.hasOwnProperty('bar'); // false
test.hasOwnProperty('goo'); // true

10.Области

В JavaScript есть два типа области видимости:

  • Локальная область
  • Глобальный охват

Переменные, объявленные внутри функции JavaScript, становятся локальными для функции.

// code here can't use name
function test() {
var name= “Shahin”;
  // code here can use name
}

Переменная, объявленная вне функции, становится глобальной. Все сценарии и функции на веб-странице могут получить к ней доступ.

var name= “Shahin”;
// code here can use name
function test() {
  // code here can also use name
}