您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JS变量中有哪些需要注意的
## 引言
JavaScript作为一门动态弱类型语言,变量的使用看似简单却暗藏许多"陷阱"。本文将从变量声明、作用域、提升、类型转换等角度,详细剖析JS变量使用中需要特别注意的关键点。
---
## 一、变量声明方式的选择
### 1. `var`的历史遗留问题
```javascript
var x = 10;
if (true) {
var x = 20; // 同一个作用域!
console.log(x); // 20
}
console.log(x); // 20
let/const
的块级作用域let y = 10;
if (true) {
let y = 20; // 不同作用域
console.log(y); // 20
}
console.log(y); // 10
const
let
var
var
的变量提升console.log(a); // undefined
var a = 5;
实际执行顺序:
var a;
console.log(a);
a = 5;
let/const
的暂时性死区(TDZ)console.log(b); // ReferenceError
let b = 10;
var
更符合直觉let global = 1;
function outer() {
let outerVar = 2;
function inner() {
console.log(outerVar); // 2
console.log(global); // 1
}
return inner;
}
function createHeavyObject() {
const bigObj = new Array(1000000).fill('*');
return () => console.log(bigObj.length);
}
// 即使不再需要,bigObj仍被保留
console.log([] == ![]); // true
// 转换步骤:
// ![] → false
// [] == false → "" == false → 0 == 0
原始值 | 转换为数字 | 转换为字符串 | 转换为布尔值 |
---|---|---|---|
”” | 0 | ”” | false |
“123” | 123 | “123” | true |
null | 0 | “null” | false |
undefined | NaN | “undefined” | false |
function leak() {
leaked = 'oops'; // 未声明直接赋值 → 成为全局变量
}
'use strict';
undeclaredVar = 1; // ReferenceError
// let class = 'math'; // SyntaxError
let klass = 'math'; // 可行的替代方案
UPPER_CASE
PascalCase
camelCase
_prefix
NaN
的检测let notNumber = 0/0;
console.log(notNumber === notNumber); // false
// 正确检测方式:
Number.isNaN(notNumber); // true
null
vs undefined
null
:显式空值undefined
:
// 优 let temp; for (let i=0; i<1000; i++) { temp = i*2; }
2. **对象属性访问缓存**:
```javascript
// 多次访问时
const len = arr.length;
for (let i=0; i<len; i++) {}
JS变量的正确使用需要理解: 1. 声明方式的差异 2. 作用域规则 3. 类型转换机制 4. 内存管理特性
掌握这些细节能帮助开发者写出更健壮、可维护的JavaScript代码。 “`
(全文约1100字,可根据需要调整具体内容细节)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。