检查变量是否已初始化的哪种方法更好/更正?(假设变量可以包含任何内容(字符串,整数,对象,函数等))
if (elem) { // or !elem
Run Code Online (Sandbox Code Playgroud)
要么
if (typeof(elem) !== 'undefined') {
Run Code Online (Sandbox Code Playgroud)
要么
if (elem != null) {
Run Code Online (Sandbox Code Playgroud) 在JavaScript中,var声明在全局对象上创建属性:
var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
Run Code Online (Sandbox Code Playgroud)
ES6引入let了具有块范围的声明的词法作用域.
let x = 15;
{
let x = 14;
}
console.log(x); // logs 15;
Run Code Online (Sandbox Code Playgroud)
但是,这些声明是否在全局对象上创建属性?
let x = 15;
// what is this supposed to log in the browser according to ES6?
console.log(window.x); // 15 in Firefox
console.log(global.x); // undefined in Node.js with flag
Run Code Online (Sandbox Code Playgroud) var name = 'John';
console.log(this.name, document.name, window.name, name);
const meme = "Bruce";
console.log(this.meme, document.meme, window.meme, meme);
Run Code Online (Sandbox Code Playgroud)
输出:
John undefined John John
undefined undefined undefined "Bruce"
Run Code Online (Sandbox Code Playgroud)
是否为var和const定义了全局范围?我认为唯一的区别是const是不可变的.