变量是存储信息的容器, 在 JS 中, 变量是松散类型的, 所以 JS 中的变量可以用来保存任何类型的数据所以变量是没有类型的, 值才有
变量标识符
标识符是指变量函数和属性的名字, 或者函数的参数, 标识符需要满足一下条件:
第一个字符必须是一个字符下划线_或一个美元符号 $;
其他字符可以是字母下划线美元符号或数字;
JS 中有一组具有特殊用途的关键字, 这些关键字可用于表示控制语句的开始或结束, 或者用于执行特定操作, 这些关键字不可用于标识符; 另外还有一组可能将来被用作关键字的保留字, 最好也不要用保留字作为标识符;
- var case = 1; // 报错, case 为关键字
- var char = 2; // 未报错, 但 char 为保留字, 建议不要用于标识符
定义变量
在 JS 中变量的定义会被分为两步, 变量声明和变量赋值
- var a = 1; // 声明变量并赋值
- // 上面可以拆分为两步
- var a; // 变量声明
- a = 1; // 变量赋值
- var b; // 声明变量未赋值, 变量值为 undefined
上面的代码我们使用了 var 操作符定义变量, 变量将会作为变量所在作用域中的局部变量如果在函数中使用 var 定义一个变量, 那么这个变量在函数退出后将会被销毁
如果未用 var 操作符而直接对变量进行赋值, 变量将会自动声明成为全局变量, 在浏览器中全局变量会作为 window 对象的属性
- a = 1; // 未使用 var
- window.a // 1
在变量声明之后再声明同名变量
- var a = 1;
- a // 1
- var a = 2; // 再次声明赋值同名变量, 变量声明已经有同名的, 所以重复的 var 声明被忽略, 但赋值不会, 所以 a 被赋新值 2
- a // 2
- var a; // 再次声明同名变量, 变量声明已经有同名的, 所以重复的 var 声明被忽略, 这条语句无效
- a // 2
变量值的类型
JS 变量仅仅是一个保存值的占位符而已, 所以变量的值可以是任何类型的数据
在 JS 中数据有七种内置类型: 空值 (null) 未定义 ( undefined) 布尔值 ( boolean) 数字 ( number) 字符串 ( string) 对象 ( object) 符号 ( symbol, ES6 中新增)null, 表示一个空对象指针, 用于将来保存对象但还没有真正保存对象时, 变量初始化的值; undefined, 表示变量已声明但未初始化赋值; Boolean, 布尔类型, 布尔(逻辑) 只能有两个值: true 或 false;string, 字符串是储存字符的变量; number, 数字类型; object, 对象是一组数据和功能的集合
- var a = 1; // 变量值可以是基本类型
- a = function () { console.log(2) }; // 修改变量的值为一个函数
变量值还有另一种类型区分方式, 分为基本类型值 (如 undefinednullbooleannumberstring) 和引用类型值(如 object)
基本类型值, 保存在栈内存, 这种值完全保存在内存的一个位置;
- var a = 1;
- var b = a;
- b = 2;
- a // 1, 基本类型值通过值复制传递, 两个值之间相互独立, 不会互相影响
引用类型值, 保存在堆内存, 变量保存的实际上只是一个指针, 这个指针指向内存中的一个位置, 该位置保存对象;
- var a = [1];
- var b = a;
- b.push(2);
- a // [1, 2], 引用类型通过引用复制传递, 两个变量指向同一个对象, 会相互影响
更多文章在 这里 , 觉得不错希望点个 star
来源: http://www.jianshu.com/p/86dec8d5f0c5