02JavaScript 变量与数据类型

JavaScript 变量与数据类型

一、变量声明

三种声明方式

1. var(传统方式)

var name = "张三";  // 函数作用域或全局作用域
var age = 25;

特点

  • 存在变量提升(hoisting)
  • 可重复声明
  • 函数作用域
  • 可声明前使用(值为undefined)

2. let(ES6+推荐)

let email = "user@example.com";  // 块级作用域
let count = 10;

特点

  • 块级作用域
  • 不可重复声明
  • 有暂时性死区(TDZ)
  • 需要先声明后使用

3. const(ES6+推荐)

const PI = 3.14159;  // 块级作用域,必须初始化
const API_URL = "https://api.example.com";

特点

  • 块级作用域
  • 必须声明时初始化
  • 不可重新赋值(但对象/数组的内容可修改)
  • 推荐用于常量

二、数据类型分类

JavaScript 有 8 种基本数据类型:

1. 原始类型(Primitive Types)

类型 说明 示例 typeof 返回值
Number 整数或浮点数 42, 3.14, NaN, Infinity "number"
String 文本数据 "Hello", 'World' "string"
Boolean 逻辑值 true, false "boolean"
Undefined 未定义的值 let x; (x为undefined) "undefined"
Null 空值 let x = null; "object"(历史遗留)
Symbol 唯一标识符(ES6) Symbol("id") "symbol"
BigInt 大整数(ES2020) 123n, BigInt(9007199254740991) "bigint"

2. 引用类型(Reference Type)

类型 说明 示例 typeof 返回值
Object 对象/字典 {name: "John", age: 30} "object"
Array 数组 [1, 2, 3] "object"
Function 函数 function() {} "function"
Date 日期 new Date() "object"
RegExp 正则表达式 /pattern/ "object"

三、数据类型检测

1. typeof 运算符

typeof 42;           // "number"
typeof "Hello";      // "string"
typeof true;         // "boolean"
typeof undefined;    // "undefined"
typeof null;         // "object" (历史遗留问题)
typeof {};           // "object"
typeof [];           // "object"
typeof function(){}; // "function"
typeof Symbol();     // "symbol"
typeof 123n;         // "bigint"

2. instanceof 运算符(检测引用类型)

[] instanceof Array;          // true
{} instanceof Object;         // true
new Date() instanceof Date;   // true

3. Array.isArray()(专用于数组检测)

Array.isArray([]);    // true
Array.isArray({});    // false

4. 严格类型检查

Object.prototype.toString.call([]);      // "[object Array]"
Object.prototype.toString.call(null);    // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"

四、类型转换

1. 显式类型转换

// 转换为字符串
String(123);        // "123"
(123).toString();   // "123"

// 转换为数字
Number("123");      // 123
parseInt("123px");  // 123
parseFloat("3.14"); // 3.14

// 转换为布尔值
Boolean(0);         // false
Boolean("");        // false
Boolean("hello");   // true
!!0;                // false (双非运算符)

2. 隐式类型转换

"5" + 3;      // "53" (字符串连接)
"5" - 3;      // 2 (数字运算)
"5" * "2";    // 10
!"hello";     // false
!!"hello";    // true
+"123";       // 123 (一元加号转为数字)

3. 常用转换规则

// 假值(falsy values)
false, 0, "", null, undefined, NaN

// 真值(truthy values)
true, 1, "hello", [], {}, function(){}

五、变量作用域

1. 全局作用域

var globalVar = "全局变量";  // 全局作用域(浏览器中为window对象)
let globalLet = "全局let";  // 全局作用域,但不是window属性

2. 函数作用域(var)

function test() {
    var localVar = "局部变量";  // 只在函数内可访问
    console.log(localVar);
}

3. 块级作用域(let/const)

if (true) {
    let blockScoped = "块级作用域";
    const CONST_IN_BLOCK = "块内常量";
    // 这里可以访问
}
// 这里不能访问

六、最佳实践

  1. 优先使用 const,需要重新赋值时使用 let
  2. 避免使用 var(除非有特殊原因)
  3. 变量命名使用驼峰式(camelCase)
  4. 常量命名使用大写加下划线(UPPER_SNAKE_CASE)
  5. 初始化时声明,不要先声明后赋值(除非必要)
  6. 使用严格相等(=== 和 !==)避免类型转换问题
// 推荐做法
const MAX_SIZE = 100;
let currentCount = 0;
const user = {
    name: "张三",
    age: 25
};

// 不推荐
var oldVariable = "过时写法";
let data;  // 避免未初始化的声明
data = "稍后赋值";

七、特殊值处理

1. null vs undefined

let a;            // undefined - 声明但未赋值
let b = null;     // null - 明确赋值为空

// 检查
if (value === null) {}        // 检查是否为null
if (value === undefined) {}   // 检查是否为undefined
if (value == null) {}         // 检查null或undefined(宽松相等)

2. NaN(Not a Number)

0 / 0;             // NaN
Number("hello");   // NaN
NaN === NaN;       // false(NaN与自身不相等)
isNaN(NaN);        // true
Number.isNaN(NaN); // true(ES6更准确的方法)

3. Infinity

1 / 0;            // Infinity
-1 / 0;           // -Infinity
isFinite(123);    // true
isFinite(Infinity); // false

注意:JavaScript 是动态类型语言,变量类型可以在运行时改变,但应避免这种模式以提高代码可读性和可维护性。

shi著
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇