js是一种无类型弱检测的语言,它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式就可以将各种类型的数据赋值给同一个变量;而且js中的变量是松散类型的,可以存储任何类型的数据;由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变
变量命名方法与规则:
1.变量的命名方法
(1)匈牙利命名法:变量名=类型+对象描述,变量的类型有:Int(整形)、Float(浮点形)、Boolean(布尔形)、String(字符串)、Array(数组)、Object(对象)、Function(函数)、Regular Expression(正则)等
(2)驼峰命名法:驼峰命名法又分为两种,一种是大驼峰,即变量名的每个单词首字母都大写,例如:TheNumber;第二种是小驼峰,即变量名的第一个单词首字母小写其他首字母大写,例如:theNumber
(3)横线连接法:即变量名的单词与单词间用下划线或者短横线连接,例如:the-number或the_number
2.变量的命名规则:
(1)变量名可以包含字母、数字、下划线和美元符号
(2)变量名首字母必须为英文字母(严格区分大小写)、美元符号或者下划线
(3).不允许使用js关键字和保留字做变量名
3.变量的声明:
(1)变量的显式声明即用 ‘var 变量名’表示,不通过var的声明为隐式声明
(2)变量必须先声明后读写,先赋值后运算
(3)定义变量不用立即赋值,可以同时声明多个变量用逗号(,)隔开
(4)同一变量可以多次声明,声明的位置不同使用范围等意义不同
4.变量的类型有哪几种
(1)值类型:值类型包含数值、布尔值、字符串、null和undefined,值类型被构造后占用空间且占用空间固定,它被保存在栈中,在后续操作中保存与复制的都是其自身,可以使用typeof来检测数据的类型,基本类型数据为值类型
(2)引用类型:使用new()方法构造出的对象是引用型的,它包含对象、数组和函数,引用类型被构造出后被保存在堆中且占用空间不固定,它在操作的时候被保存和复制的通常是内存地址或者指向该对象的指针,使用instanceof来检测数据的类型
变量的作用域:
1.变量包含两种:
(1)全局变量:包括在函数体外定义的变量和在函数体内定义的无var变量,可以在任何位置调用,在顶层代码中我们使用this关键字和window对象都可以访问到它
(2)局部变量:包括在函数内部使用var声明的变量和函数的参数变量,只能在当前函数体内调用
2.不同变量的优先级:
局部变量高于参数变量高于全局变量
3.变量都有哪些特性:
(1)全局变量是全局对象的属性,局部变量是调用对象的属性
(2)内部函数可访问外层函数的局部变量,外层函数不能访问内层函数的局部变量
(3)全局变量除非被显示删除,否则一直存在;局部变量自声明起至函数运行完毕或被显式销毁;因此在程序设计中我们需要考虑如何合理声明变量,这样既减少不必要的内存开销,同时也能很大程度地避免变量重复定义而覆盖先前定义的变量所造成的Debug麻烦。
(4)另外还可以使用标记清零和引用计数等回收机制结束变量的生命周期
(5)JS变量没有块级作用域
(6)当我们访问一个没有声明的变量时JS会报错,而当我们给一个没有声明的变量赋值时JS不会报错,相反它会认为我们是要隐式申明一个全局变量
(7)用var关键字声明的变量,未经初始化时保存的是一个特殊的值—undefined,变量初始化仅仅是给变量赋一个值
(8)使用更具语义的变量名,让代码的可读性更强
特殊数值常量:
Infinity:无穷大的特殊值
NaN:非数字值
Number.MAX_VALUE:可表示的最大数字
Number.MIN_VALUE:可表示的最小数字
Number.NaN:非数字值
Number.POSITIVE_INFINITY:正无穷大
Number.NEGATIVE_INFINITY:负无穷大