变量
什么是变量
变量是一种可以变化的量,变量主要是用于存储数据的;用于临时存放数据,方便取用。
- 硬盘:持久性存储
- 内存:临时性存储
声明和定义变量
声明变量
声明变量:先声明变量,后赋值。
格式:
var
变量名;
//一次声明一个变量var
变量名1,
变量名2;
//一次声明多个变量
定义变量
定义变量:定义一个变量,并赋值。
格式:var
变量名=
变量值;
在声明或定义变量时,一定不能缺少var关键字
变量名的命名规则
- 变量名可以是大小写英文字母、数字、下划线_、美元符号$来组合
- 变量名不能以数字开头,即只能以大小写英文字母或下划线或美元符号开头
- 变量名不能使用JavaScript关键字或保留字做变量名
- 如果一个变量名是由多个单词组成的,建议是由驼峰法或者下划线连接法
- 驼峰法:从第二个单词开始首字母大写
- 下划线连接法:每两个单词之间用下划线连接
变量的数据类型
变量的数据类型分为:两大类、七小种。
两大类:基本(标量)数据类型 和 复合数据类型。
基本数据类型:只能存储一个数。
复合数据类型:至少存储一个值,可以存储多个值。
- JavaScript是一种弱类型语言,在声明变量的时候不需要指定变量的数据类型。
强类型语言在声明变量的时候一定要先指明这个变量的数据类型是什么,并且值也是这个数据类型。 - 在JavaScript中的变量说明的时候不需要去指定变量的数据类型,但是他也是有数据类型的,它的数据类型是由其值来决定的。
typeof 方法
:检测变量数据类型的方法。
直接使用
格式:
typeof
要检测的变量
或
typeof (
要检测的变量)
基本(标量)数据类型
:只能存储一个数。
字符串型String
:变量的值是加了引号的数据,单双引号都可以。
- 转义字符加
\
,即String类型还有引号,用\"
和\'
分别表示单双引号。
但在工作中,一般如果使用的是双引号定义变量,那么字符串将使用单引号,即双包单;同理,还有单包双的使用。
数值型类型Number
:包含整数、小数、NaN
。
-
可以表示的进制数:十进制、八进制(0开头数字)、十六进制(0x开头),但最后输出的结果是转换后的十进制
-
NaN
:Not a Number(判断NaN时,不要使用NaN直接判断,应使用函数isNaN
,详情见笔记整理1) -
Number.MAX_VALUE
数值型的最大值 -
Number.MIN_VALUE
数值型的最小值 -
Infinity
无穷大 -
-Infinity
无穷小
布尔型Boolean
:主要用来表示真和假。
取值:真true
和假false
未定义型undefined
:一个未定义的数据类型。
两种情况:
- 定义一个变量,将其赋值为undefined
- 定义一个变量并没有赋值,直接打印或者使用这个变量,就会得到undefined
空型null
:一个空型的数据类型。
- 当定义一个变量的值为null时,它的类型是Object。
复合数据类型
至少存储一个值,可以存储多个值。
对象Object
数组Array
变量数据类型的转换
:将一种数据类型转换为其他的数据类型。
在JS中,变量数据类型的转换分成两种:自动转换 和 强制转换。
- 自动转换的结果和强制转换的结果是一样的。
自动转换
(隐式转换):代码在运行过程中,根据上下文的环境进行变量数据类型的自动转换。
- 自动转换由系统自己完成,我们是看不见系统转换的过程;
强制转换
强制转换是通过JavaScript中的三个系统函数来完成。
函数1:Boolean(
变量名)
作用:将其他的额数据类型强制转换为Boolean型时,需要用到Boolean(
变量名)
。
-
只有两种结果:true 和 false
-
各类型的转换结果:
undefined —> false
null —> false0 —> false
NaN —> false
除了0和NaN —> true空字符串 —> false
除了空字符串以外的字符串 —> true
函数2:Number(
变量名)
作用:将其他的额数据类型强制转换为number数值型时,需要用到Number(
变量名)
。
-
特殊情况:当将其他变量的数据类型转换为Number的时候,如果不能直接转换,则最后将变为数值类型
NaN
-
各类型的转换结果:
undefined —> NaN
null —> 0true —> 1
false —> 0空字符串和有空格的字符串 —> 0
纯数字字符串 —> 对应数字
其他情况 —> NaN
转换具体数值类型(详见笔记整理1) - `parseInt(`变量名`)` - `parseFloat(`变量名`)`
函数3:String(
变量名)
作用:将其他的额数据类型强制转换为String字符串型时,需要用到String(
变量名)
。
转换规则:在其他的数据类型的外面包裹一对引号。
- 特殊: undefined —> ‘string’
方法二:
.toString()
转换
比较:如果有意义,使用toString;无意义,则使用String
函数
:可以被命名的,为了解决某些功能的代码段(函数体)。
作用:为了解决代码的重复利用,减少代码量。
分类:函数分为 系统内置函数 和 自定义函数。
- 当调用typeof 一个函数时,会得到function,可以理解为函数是一个类型。
- 函数可以作为返回值使用。
定义函数
格式:
function 函数名称([参数列表]){
函数体
return;
}
结构说明:
- function是关键字,不可省略;
- 函数名的命名规则与变量名相同;
- 严格区分大小写
- 可以是大小写英文字母、数字、下划线_、美元符号$来组合
- 不能以数字开头,即只能以大小写英文字母或下划线或美元符号开头
- 不能使用JavaScript关键字或保留字做变量名
- 建议使用驼峰法或者下划线连接法
- 函数名后紧跟一对小括号,小括号不能省略;
- 小括号里面可以有参数,称为形式参数(形参);
- 小括号后紧跟一对大括号,大括号不能省略;
注意:函数一旦被定义就必须调用。
- 同名函数后面的会把前面覆盖
- 函数先定义后调用,但是函数具备预先加载能力,在调用函数时,其实并没有真正意义上的执行,他还需要继续往下读代码;注意变量没这种能力。
调用函数
格式:函数名(
[实际参数]);
函数的参数
形式参数
简称形参
- 形参的默认值:在函数定义时,给形式参数赋值。
- 默认值问题:如果形参中有多个参数,默认形参一定要放置在参数列表的最后。
实际参数
简称实参
return关键字
一般在函数体里面不会有输出语句,只会有一个return关键字,将我们要返回的内容返回给函数的调用者。
两层含义:
- 当函数体里面遇到return关键字以后,当前的这个函数就不会再往下执行了。
- 它会向函数的调用者返回数据(返回值)
格式:return
数据;
- 在一个函数里面,return关键字可以有多个,但是return只会执行一次。
- return关键字只返回一个数据,如果需要返回多个数据 ,可将多个人多个数据使用数组的方式来保存 ,再将数组返回。
- 在调用函数时,可以定义一个变量要接收到这个函数的返回值。
注意:在工作中,函数体中尽量不要有输出语句,尽量使用return关键字将数据返回给函数的调用者。
匿名函数
:没有名字的函数。
- 注意:匿名函数在js中使用最多。
匿名函数的定义
格式:
function ([参数列表]){
函数体
return;
}
理解:在函数的定义上去掉函数名称。
匿名函数的调用
三种方法如下:
1.将匿名函数赋值给变量
格式: var
变量名 =
匿名函数定义
再利用变量名调用函数
**2.将匿名函数赋值给事件
例如事件window.onload,这个事件表示但页面加载完成后;
该例子代码如下:
window.onload = function (){
document.body.style.backgroundColor="#f00";
}
事件触发即调用函数
3.匿名函数的自调用
:匿名函数自己调用自己。
格式:(
匿名函数定义)([实参])
理解:将(
匿名函数定义`)视为函数名。
变量的作用域
:变量在什么地方可以使用,什么地方不可以使用。
- 通过函数进行划分。
变量的作用域分类
变量的作用域分类分为:全局作用域 和 局部作用域。
先了解 全局变量 和 局部变量。
全局变量:在函数外部定义的变量,作用域是全局的。
全局作用域
:变量在函数外和函数中均可使用。
局部变量:在函数内部定义的变量,作用域是局部的。
局部作用域
:变量只能在函数内使用,在函数外不可使用。
值传递与引用传递
传递:变量与变量之间的赋值操作。
注意:在js中,基本数据类型之间的赋值操作都是值传递,复合数据类型之间的赋值操作都是引用传递。
值传递
:将一个变量的值赋值给另外一个变量。
如果修改其中一个变量的值,不会影响到另外一个变量的值,即这两个变量没有任何联系。
引用传递
:将一个变量的值(内存地址)赋值给另外一个变量,如果修改其中一个变量的值,会影响到另外一个变量的值,即这两个变量之间是有联系的。
JavaScript的预解析
:提前解析代码,即将变量、函数的声明提前,提前到当前作用域的是前面。