4.1 数据类型和变量
数据类型实际上就是数据的一种描述,任何一门编程语言都可以处理多种类型的数据,只是有的是强类型(Java) ,有的弱类型的(JavaScipt)。
JavaScipt数据类型有三种:
1、基本数据类型
JS中基本数据类型主要由3种组成:数值数据类型、文本数据类型、布尔数据类型
2、复合数据类型
JS中复合数据类型主要包括用来保存一组或者不同数据类型数据的数组,用来保存JS码块的被反复调用的函数,用来保存数组和函数的对象
3、特殊数据类型
特殊数据类型:没有值存在的空数据类型null,没有进行任何定义的无定义数据类型undefined
4.1.1 基本数据类型
4.1.1.1 数值数据类型
数值数据类型,就是指数字。例:1,2,3......。在JS中没有整数和浮点数的说法。
无论什么样的数字,都是数字。并且数值数据类型取值范围:-10的308次方到10的308次方
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324
当取值超过10的308次方,也就是无穷大,无穷大在JS中使用Infinity表示。当取值超出了-10的308次方,也就是无穷小,无穷小在JS中使用-Infinity表示。如果在JS中,数值计算错误将成返回NaN (Not a Number ),NaN是一个特殊的数值,也是属于数值型。
-infinity | num<=-1.7976931348623157e+308 |
正常显示 | -1.7976931348623157e+308<num<-5e-324 |
-0 | -5e-324<num<0 |
0 | 0<=num<=5e-423 |
正常显示 | 5e-423<num<1.7976931348623157e+308 |
infinity | num>=1.7976931348623157e+308 |
4.1.1.2 字符串数据类型
字符串类型是指由” ”或者’ ’括起来的内容,内容可以由0-N个字符组成。它可以是大小字母,也可以是数字、标点符号或者一些其他的特殊字符,当然也包括汉字。
比如:
"hello word"解释后结果为:hello word
""解释后结果:为不包含任何内容的空字符串
" "解释后结果为:由空格组成的字符串
在使用字符串数据类型的时候,需要注意:
a)字符串必须要使用双引号或者单引号包含起来,并且符号必须成对的
b)空字符串是指没有任何内容的字符串,不是包含空格的字符串
c)所有的引号都必须是在英文输入法状态下输入的
d)通过转义字符“\”来在字符串中添加不可显示的特殊字符,或者比如:
转义序列 | 字符 |
\b | 退格 |
\f | 走纸换页 |
\n | 换行 |
\r | 回车 |
\t | 横向跳格 (Ctrl-I) |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
4.1.1.3 布尔数据类型
布尔数据类型值,主要用于逻辑判断,它只有2个值:true和false,分别表示真或者。
例外,需要注意的是:在JS中,我们还可以使用非0和0表示真假。0表示假,非0表示真。
4.1.2 复合数据类型
4.1.2.1 数组
Java的数组只能存放相同数据类型的数据,而在JS中数据可以存放不同数据类型的数据
4.1.2.2 函数
函数(Java中的方法)主要用来保存一段JS代码,从而做到这段代码可以被无限重复
4.1.2.3 对象
用来存放数组和函数的对象,就是这里的对象
4.1.3 特殊数据类型
4.1.3.1 无定义数据类型(undefined)
undefined的意思是"未定义的" ,表示你现在用的变量没有定义过,通常只有JS代码才会返回。以下三种情况可能会出现:
a)引用一个曾经定义过,但是没有赋初值的变量
b)引用一个不存在的数组元素
c)引入一个不存在的对象属性
undefined是一个返回值,JS中还可以把这个值拿去和其他数据类型做个比较,比如:
if(str == undefined){}
4.1.3.2 空数据类型
Null 就表示"空" ,表示没有值存在。Null不能与任何数据类型的数据进行比较。
4.1.4 变量
变量,顾名思义,就是指在程序运行过程中可变的量。变量是存储信息的单元,它对应内存中某些区域。变量名就代表了那片存储区域。JS是一种弱类型的程序设计语言,也就是说变量可以不声明直接使用,所谓的声明变量就是指给变量指定一个名称,声明变量后,就可以它作为存储单元。
4.1.4.1 变量定义
JS使用关键字var声明变量,该关键字之后的字符串就是变量名,语法格式为:
var 变量名=变量值;
当然JS同样也支持1次性定义多个变量名。多个变量名之间采用逗号","分割,比如:
var userName,pasword,age,gender;
然后在对这些变量进行赋值
在JS中,var可以省略掉,但是在用时,一定要赋值,如:
userName="李四";
4.1.4.2 变量赋值
JAVA中给变量赋值,采用"="赋值云算法,在JS中一样,例如:
var userName;
userName="李四";
强烈要求:必须给每一个定义出来的变量赋初值
4.1.4.3 变量作用范围
所谓的变量作用范围,就是指可以使用该变量的代码区域,Java中有全局变量和局部的说法,JS中同样也存在。
全局变量:可以在整个HTML文档范围都可以使用的变量,这种变量需要定义在函数之外。
局部变量:只能在函数内部局部使用的变量,通常这种变量都定义在函数内部,所只有函数体才可以访问。
4.1.5 标识符
JS编写代码,跟JAVA编写代码一样,也同样存在很多地方都需要定义名称,例如:JS中变量名,JS中函数名......,定义这些名称时,可以使用的字符串序列就被称之为标识符。
- 标识符由字母、数字、下划线和美元符号组成,但是不能包括空格、标点符号、运算符.....
- 标识符不能以数字开头
- 标识符不能与关键字同名,例如: if、else、funtion、switch......
- 见名知意
- 遵从一些软性规则,比如大驼峰、小驼峰......
请参考java标识符命名规范
4.1.6 关键字
关键字,就是某一个编程语言中具有特殊含义的标识符。一般这个标识符,我们程序员只有使用的权利,没有重新定义的权利,在定义变量、函数、数组等数据类型的名称时,我们都不能使用它们。
Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。
bstract | arguments | boolean | break | byte |
case | catch | char | class* | const |
continue | debugger | default | delete | do |
double | else | enum* | eval | export* |
extends* | false | final | finally | float |
for | function | goto | if | implements |
import* | in | instanceof | int | interface |
let | long | native | new | null |
package | private | protected | public | return |
short | static | super* | switch | synchronized |
this | throw | throws | transient | true |
try | typeof | var | void | volatile |
while | with | yield |
|
|
4.1.7 运算符和表达式
运算符可以说我们每一种编程语言中,必不可少的一个基本元素,因为我们在程序流程或者程序数据处理的过程,需要使用到它。运算符就是用来操作数据的符号,操作数就是被运算符操作的数据。
JS中,运算符如果按照操作数的个数来划分:一元运算符、二元运算符、三元运算符
如果按照功能来划分:赋值运算符、算术运算符、关系运算符、位操作运算符、逻辑运算符、条件运算符、特殊运算符
4.1.7.1 算数运算符
它是所有运算符中最简单的。JS中提供的算术运算符有:(+,-,*,/ ,%,++,--)其中的前5个,都是二元运算符。后2个,则是一元运算符。
进行加法运算时,存在字符串运算,那么数值类型变为字符串进行拼接
比如:
var str="hello"+12;
//得到结果为:hello12
4.1.7.2 赋值运算符
由赋值运算符和操作数组成的表达式,被称为赋值表达式。赋值表达式的功能是将右侧计算后的结果赋值给左侧的变量。
运算符 | 例子 | 等同于 |
= | x=y |
|
+= | x+=y | x=x+y |
-= | x-=y | x=x-y |
*= | x*=y | x=x*y |
/= | x/=y | x=x/y |
%= | x%=y | x=x%y |
赋值表达式,一定是先计算右侧的代码,然后在赋值给左侧
比如:
var x = 5;
x += 5;
//得到x等于10;
//等同于下面的代码
var x = 5;
x = x+5;
4.1.7.3 关系运算符
关系运算符实际上是逻辑运算符的一种,可以把它理解为是一种判断,而判断的结果 ,要么是"真" ,要么是"假"
JS中关系运算符: == != < > <= >= 一共6种
注意:=是赋值运算符,==是关系运算符
4.1.7.4 位操作运算符
位运算符是将数剧按照二进制位的方式来进行运算的一种符号, JS中的位运算符有:
& (与) |(或) ^(异或) ~取反 <<左移 >>右移
& (与) | 先转为二进制进行运算,同为1才为1 |
|(或) | 先转为二进制进行运算,有1就为1 |
^(异或) | 先转为二进制进行运算,同1同0为0,不同为1 |
~取反 | 先转为二进制进行运算,取反,得到取反后的补码,对补码-1取反得到原码 |
<<左移 | 先转为二进制进行运算,向左移动,左边超出部分去掉,右边部分用0补全 |
>>右移 | 先转为二进制进行运算,向右移动,右边超出部分去掉,左边部分用0补全 |
4.1.7.5 逻辑运算符
JS中的逻辑运算符&&、|| 、! 分别是:逻辑与、逻辑或、逻辑非。逻辑运算符要求操作数只能是布尔型的数据,逻辑与、逻辑或都是二元运算符,而逻辑非是一元运算符。
逻辑与(短路与) :同为真,才为真;
逻辑或(短路或) :只要有1个为真,便为真逻辑;
非:非真既假,非假既真
4.1.7.6 其他运算符
a)三目运算符
语法:
条件表达式?表达式1:表达式2
按照条件表达式执行,如果执行结果为“真" ,则执行表达式1的内容;否则,执行表达式2的内容
b)运算符的优先级
1、() 执行顺序:从左到右
2、++/-- 执行顺序,从右到左(这里分前加加/减减,后加加/减减),如果没有进行赋值的操作,就是直接加或减
//比如下面这写代码,++或--用法一致
var x=5;
y=x++;//这里是后加加,先用后加,那么就先赋值,y就等于5,赋值之后x等于6
//现在x等于6
y=++x;//这里是前加加,先加后用,那么先进行加法运算,则x等于7,在进行赋值,y等于7
3、/ * % 执行顺序:从左到右
4、+ - 执行顺序:从左到右
5、< > <= >= 执行顺序:从左到右
6、== != 执行顺序:从左到右
7、&& || 执行顺序:从左到右
8、= += -= *= /= %= 执行顺序:从右到左推荐
推荐:写表达式的时候,如果无法确定运算符的先后顺序,就多使用()