JavaScript: возможно ли присвоить значение «неопределено»? (вопрос от You-Dont-know JS) - PullRequest
0 голосов
/ 16 октября 2019

Чтение You-dont-know-Js в этой главе: https://github.com/getify/You-Dont-Know-JS/blob/2nd-ed/scope-closures/ch3.md

есть фрагмент кода:

undefined = true; // setting a land-mine for other code! avoid!

(function IIFE( undefined ){

	var a;
	if (a === undefined) {
		console.log( "Undefined is safe here!" );
	}

})();

Что касается немедленно выполняемой функции, я знаю, что аргумент не определен, a также не определен, таким образом, === undefined.

мой вопросэто как можно присвоить значение неопределенному? Как я понимаю, undefined - это примитивный тип в js, тогда что означает undefined = true;?

Кроме того, чтобы проверить мое понимание, я немного изменил этот код:

undefined = 5; // set undefined to an integer? how can it be?

(function IIFE( undefined ){

	var a;
	if (a === undefined) {
		console.log( "Undefined is safe here!" );
	}

})(undefined);  //still execute console.log function

и результат остается таким же

1 Ответ

2 голосов
/ 16 октября 2019

как можно присвоить значение неопределенному? Как я понимаю, undefined - это примитивный тип в js, тогда что означает undefined = true ;?

Вы правы, undefined является примитивным типом, но это не литерал .

Когда вы обращаетесь к undefined, вы получаете доступ к свойству в глобальном объекте.

До ES5 это свойство было доступно для записи, и его можно было переопределить.

Но, начиная с ES5, он был определен как недоступно для записи , и теперь его нельзя изменить.

Не являясь литералом, таким как null, true или false, позволяет использовать undefined в качестве имени привязки для переменной,параметр функции или имя функции, но не в глобальной области видимости. Это будет конфликтовать со встроенным undefined.

(function () {
  'use strict';  
  const undefined = 'some value';  
  console.log(undefined); // "some value"  
})();
...