Если вы не видите мою предыдущую статью, пожалуйста, сначала прочтите ее, а затем вернитесь сюда: 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 }