js中与变量相关的一些知识

    xiaoxiao2026-05-21  11

    来补充一点上一篇文章 js变量初探 中漏掉的知识点: 1.变量的定义与声明中常见问题: (1)用var关键字声明的变量,未经初始化时,保存的是一个特殊的值—undefined,变量初始化仅仅是给变量赋一个值 (2)当使用var关键字声明了一个变量时,创建的这个变量是不可配置的,也就是说这个变量无法通过delete运算符删除;在严格模式下,使用delete运算符删除var关键字声明的变量会导致SyntaxError。 (3)省略var关键字会导致定义一个全局变量,但是不推荐这种做法。在严格模式下,给未声明的变量赋值会导致ReferenceError。 (4)变量的声明、定义与初始化 a)声明:给变量一个名字,宣告它从此刻开始存在; b)定义:给变量分配一个存储空间; c)初始化:给变量的存储空间赋值。 由于JS是一种动态语言,其变量的类型是不固定的,可以随着保存值的变化而变化,所以其定义变得无关紧要 (5)变量声明提升 JS在执行的时候,会把所有变量的声明都提升到当前作用域的最前面;声明提升,这步操作是在JS引擎“预编译”阶段实现的,是在代码开始运行之前; 2.基本类型与引用类型 (1)对于基本类型值,在复制变量的时候,会在新的变量上创建一个新值,这个新值是原值的一个副本,它们相互独立;基本类型值之间的比较,只是单纯的值的比较 (2)引用类型值是保存在变量中的对象,保存引用类型值的变量,实际上保存的是一个指向该对象的指针;当复制保存着对象的某个变量时,复制的其实是指针;复制操作结束后,两个变量指向同一个对象 (3)对于引用类型值,可以为其添加属性和方法,也可以修改或者删除其属性和方法;在为对象添加属性和方法时,操作的是实际的对象,因此,改变任何一个变量,都会影响另外一个变量。 (4)引用类型值的比较并非值的比较:即使两个对象包含相同的属性和值,它们也是不相等的;各个索引元素完全相等的两个数组也不相等;引用类型值的比较是引用的比较,当且仅当它们引用同一个对象时,它们才相等 3.全局变量:当JS解析器启动时,或者任何Web浏览器加载新页面的时候,它将创建一个新的全局对象,并给他一组定义的初始属性: (1)全局属性:比如undefined、Infinite、NaN (2)全局函数:比如isNaN()、parseInt()、eval() (3)构造函数,比如Date()、String()、Array()、Object() (4)全局对象:比如Math、Json 初次创建的时候,全局对象定义了JS中所有的预定义全局值;如果代码声明了一个全局变量,这个全局变量就是全局对象的一个属性。 4.名字解析顺序 JS中一个名字可能以4种方式进入作用域,其优先级如下: (1)语言内置:所有作用域中都有arguments对象和this对象; (2)函数声明 (3)形式参数 (4)变量声明:不会影响同名的函数声明或者形式参数声明
    最新回复(0)