之前竟然对常量、字面量都没有搞清楚,要学习的真的是好的 刚才终于搞清楚了 是该好好在学一遍 js 的
字面量:在编程语言中,一般固定值称为字面量,如 3.14。
不是一种值,而是一种变量记法
等号右侧的值均为字面量 var a = 1
. 数字(Number)字面量 可以是整数或者是小数,或者是科学计数 (e)。3.14 1001
. 字符串(String)字面量 可以使用单引号或双引号:
"John Doe" 'John Doe'
. 对象(Object)字面量 定义一个对象:{firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
还有函数字面量、数组字面量等
常量:与变量一样均是用于‘存储数据’的容器,只不过常量的值在程序的运行中不可以发生改变
在 ES6 之前并没有声明常量的方法,在 ES6 中新增加了 const 来定义常量
建议常量的命名全部大写,如果由多个单词构成,可以用下划线分割
const MY_SITE="http://www.zhangpeiyue.com";//MY_SITE 为常量,"http://www.zhangpeiyue.com" 为字面量
只能在初始化的时候被赋值,赋值以后不允许被再次赋值
变量:也是用于存储数据的容器,在程序的运行中可以发生改变或者被再次赋值
可以使用 var 关键字来声明变量,变量的值可以是任意类型。为了更好的阅读,建议变量使用驼峰命名法命名:var myName="js";//myName 为变量,“zhangpeiyue" 为字面量
在 ES6 中新增了 let 关键字声明变量,作用与 var 类似,只是声明的变量只在其所在区域内有效:let str="es6";//str 为变量,"es6" 为字面量
说明:var,let 和不用任何修饰的变量的区别
num = 1 代表 window 的一个属性,不能使用 delete 删除
var num = 1; 代表全家变量,可以使用 delete 删除
let num = 1; 代表局部变量
常量,变量,字面量的区别
常量与变量的区别:常量与变量的存储方式是一样的,只不过常量必须要有初始值,而且值不允许被修改,而变量可以无初始值,且可以多次赋值。常量与字面量的区别:常量与字面量均不会被改变。常量为存储数据的容器,而字面量为等号右侧的值,字面量是由字符串,数字等构成的字符串或数值。
再说一下标识符:标识符是名称。在 JavaScript 中,标识符用于命名变量(以及关键词、函数和标签)。
标识符须除了关键字、保留字之外才行
let 是声明变量
- 它不同于 var,不存在变量提升 在声明变量之前该变量是不可用的,否则会报错,这在语法上叫“暂时性死区”;
- let 不允许同一作用域内重复声明
-
在某些场合下 var 声明变量是不合理的
` 场景 1:内层变量覆盖了外层变量 var tmp = new Date(); function f () {console.log(tmp) if (false) {var tmp = 'hello world!'} } f () // undefined 场景 2:用来计数的循环变量泄露为全局变量 var a = 'hello' for (var i = 0; i<a.length; i++) {console.log(a[i]); } console.log(i) // 5 这里 i 只是用来控制循环,但循环结束后,它并没有消失,而是泄露成了全局变量,这样可能很不好 所以 for(let i =0;...)可能会 是更好的选择 `
-
关于块级作用域,可能有的小白不知道,其实它就是 {} {{}} 这就是两个块级作用域了
let 就是给 js 新增块级作用域的那个法器一些说明 . 外层作用域无法读取内层作用域的变量 . 块级作用域与函数声明有点复杂 就不多说了 但 ES6 支持(允许)在块级作用域内声明函数
const 是声明常量
-
它声明一个只读常量,且一旦声明,就不能改变
eg:const PI = 3.1415PI // 3.1415 PI = 3 // 报错
- 声明必须赋值,否则报错
eg: const FOO // 报错 - 不会提升,必须先声明再使用,否则报错
- 和 let 一样,不能重复声明,否则报错
const 本质:
const 实际上保证的并不是变量的值不能改动,而是变量指向的那个内存地址不得改动。
但这对于简单的数据类型来说(数值、字符串、布尔值等),值就是保存在变量指向的内存地址中,因此等同于常量(所以,说 const 是声明常量好像不太准确了)
但对于复合类型的数据(主要是数组和对象呐),变量指向的内存地址保存的只是一个指针,const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这完全不能由它控制。因此,将一个对象(或数组)声明为常量时一定要考虑好哦