JavaScript的变量和数据类型
# 变量
# 变量的命名格式
在JavaScript中一个变量包含两个部分
- 变量的声明:在JavaScript中声明一个变量使用
var
关键字 - 变量的赋值:使用
=
给变量进行赋值
// 变量定义
var name = 'zs'
// 先定义变量后赋值
var name;
name = 'zs'
// 同时声明多个变量
var name, age, height
name = 'zs'
age = 18
height = '180'
// 或者
var name = 'zs', age = 18, height =180
2
3
4
5
6
7
8
9
10
11
12
# 变量的命名规范
- 第一个字符必须是一个字母,下划线(_),或者一个美元符号($)
- 其它字符可以是字母,下划线,美元符号或者数字
- 一些关键字和保留字不能用作变量名称
- 变量严格区分大小写
- 多个单词使用驼峰标识
- 等于号两边建议都加上一个空格
- 一条语句结束后加上分号
- 变量命名应该见名知意
# 交换两个数字变量
方式一 借助于第三个变量
var num1 = 10
var num2 = 20
var temp = num1
num1 = num2
num2 = temp
2
3
4
5
方式二, 不借助于第三个变量,可能的面试题
num1 = num1 + num2
num2 = num1 - num2
num1 = num1 - num2
2
3
# 变量使用的注意事项
- 如果一个变量未声明就直接使用会报错
<script>
console.log(message)
</script>
2
3
- 如果一个变量有声明但是没有赋值,默认值是
undefined
var info
console.log(info)
2
- 如果没有使用
var
声明变量也可以,但是不推荐,事实上会被添加到window对象上
admin = 'zs'
console.log(admin)
console.log(window)
2
3
# JavaScript数据类型
JavaScript中的值都具有特定的类型;例如字符串或者数字,可以将值赋值给一个变量,那么这个变量就具备了特定的类型。一个变量可以在前一刻是字符串,在下一刻就存储一个数字。允许这种操作的编程语言(例如JavaScript),被称为动态类型的编程语言。
# 在JavaScript中有8种基本的数据类型(7种原始类型和1种复杂类型)
- Number
- String
- Boolean
- Undefined
- Null
- Object
- BigInt
- Symbol
# Number类型
number类型代表整数和浮点数
var age = 18
var height = 1.88
2
数字number可以有很多操作,比如,乘法、除法、加法、减法等等
var result1 = 10 * 2;
var result2 = 10 / 3;
2
除了常规的数字,还包括所谓的"特殊数值"也属于Number类型
- Infinity:代表数学概念多种的无穷大,也可以表示-Infinity;比如1/0得到无穷大
- NaN:NaN代表一个计算错误,它是一个错误的操作所得到的结果,比如字符串和一个数字相乘
数值型表示方法
数字类型可以使用十进制、十六进制、二进制、八进制表示
数字表示范围
- 最大正数值:Number.MAX_VALUE,这个值为:1.7976931348623157e+308
- 最小正数值:Number.MIN_VALUE,这个值为:5e-324,小于这个数值会被转化为0
isNaN
- 用于判断是否不是一个数字,不是数字返回true,是数字返回 false
# String类型
使用字符串型表示文本,在JavaScript中,有三种包含字符串的方式。
var name = "zs"; // 双引号
var address = 'bj' // 单引号
var desc = `Hello` // 反引号
2
3
# 字符串的属性和方法
字符串拼接
使用+
拼接字符串
获取字符串的长度
console.log(str.length)
# Boolean类型
Boolean(布尔)类型用于表示真假,Boolean类型仅包含两个值:true和false
# Undefined类型
Undefined类型只有一个值,就是特殊值undefined
如果声明一个变量但是没有对其进行初始化,那么该变量的默认值就是undefined
var message
console.log(message) // undefined
console.log(message === undefined) // true
2
3
因此在定义变量时需要注意
- 最好在变量定义的时候进行初始化,而不是声明一个变量
- 不要显示的将一个变量赋值为undefined,如果初始化时什么值都没有可以初始化为0,空字符串,null等值。
# Object类型
Object类型是一个特殊的类型,通常称为引用类型或者复杂类型,其它数据类型称之为原始类型,因为他们的值只有一个单独的内容(字符串、数字或其他)
Object类型可以表示一组数据,是其它数据的一个集合
在JavaScript中使用{}
来表示一个对象。
当给一个对象初始化时但是不确定赋什么值的时候,建议初始化为null,如果初始化为{},会在堆内存中占据一定的空间。
对象初始化为{},转换成布尔类型时结果为true。null在初始化为布尔类型时结果是false
# NULL类型
NULL类型同样只有一个值,即特殊值null
null类型通常用来表示一个对象为空,所以通常在给一个对象初始化时,会赋值为null
console.log(typeof null) // object
null和undefined的关系
- undefined通常只有在一个变量声明但是未初始化时,默认值为undefined才会用到
- 不推荐直接给一个变量赋值为undefined,所有很少主动使用
- null值比较常用,当一个变量准备保存一个对象,但是这个对应不确定时,可以先赋值为null
# typeof操作符
因为ECMAScript的类型系统是松散的,所以需要一种手段来确定任意变量的数据类型,因此诞生了typeof 操作符
对于一个值使用typeof会返回下列字符串之一
- 'undefined'表示值未定义
- 'boolean' 表示值为布尔值
- 'string'表示值为字符串
- 'number' 表示值为数值
- 'object'表示值未对象(而不是函数)或则null
typeof null
的结果是 'object' - 'function' 表示值为函数
- 'symbol' 表示值为符号
# typeof()的用法
你可能还会遇到另一种语法:typeof(x),它与 typeof x 相同;
typeof是一个操作符,并非是一个函数, ()只是将后续的内容当做一个整体而已
# 数据类型总结
JavaScript中有八种基本数据类型(前面七种为基本数据类型,也称为原始类型),而Object为复杂数据类型,也称为引用类型
- number用于任何类型的数字:整数或者浮点数
- string用于字符串,一个字符串可以包含0个或多个字符,所有没有单独的单字符类型
- boolean用于true或者false
- undefined用于未定义的值 只有一个undefined值的独立类型
- object用于更复杂的数据结构
- null用于未知的值 只有一个null值的独立类型
- symbol用于唯一的标识符
- bigint用于任意长度的整数
# 数据类型转换
实际开发中经常需要在不同的数据类型之间进行某些操作也就是需要经常对数据类型进行转换,大多数情况下,运算符合函数会自动将赋予他们的值转换为正确的类型,这是一种隐式转换,那么相对应的就存在显示的对数据类型进行转换
# 字符串(String)的转换
- 其它类型经常需要转换成字符串类型,比如和字符串拼接在一起或使用字符串中的方法
- 隐式转换
- 一个字符串和其它类型进行+操作,如果
+
左右两边有一个是字符串,那么另一边会自动转换成字符串类型进行拼接 - 某些函数的执行也会自动将参数转为字符串类型,比如console.log()函数
- 一个字符串和其它类型进行+操作,如果
- 显示转换
- 调用
toString()
方法 - 调用
String()
函数
- 调用
# 数字类型Number转换
其它类型也有可能会转成数字类型
- 隐式转换
- 在算术运算中,通常会将其他类型转换成数字类型来进行计算,比如 "6"/"2"; 如果是+运算,并且其中一边有字符串,那么还是按照字符串来连接的
- 显示转换
- 可以使用Number()函数来进行显示的转换
其他类型转换数字的规则
值 | 转换后的值 |
---|---|
undefined | NaN |
null | 0 |
true和false | 1 and 0 |
string | 去掉首尾空额后的纯数字字符串中含有的数字,如果剩余空字符串为空,则转换结果为0,否则,将会从剩余字符串中读取数字,当类型转换出现error时返回NaN |
# 布尔类型(Boolean)的转换
不二类型的转换是最简单的,其发生在逻辑运算中,但是也可以通过调用Boolean(value)显示地进行转换
转换规则如下
直观上为“空”的值,如0,空字符串,null,undefined和NaN将变为false
其它值变成true
注意
包含0的字符串“0”是true,在JavaScript中非空的字符串总是true