JavaScript中的变量、数据类型以及运算符
MaHongli 2019-11-11 JavaScript
# 变量的声明
JavaScript 是弱类型语言,所以可以放任意类型的值
在ES6以前,一直使用 var 声明变量,ES6 新增 let、const
let a; //变量声明
let n = 5; //变量初始化 || 声明变量并赋值
1
2
2
# var的特征
- 支持重复的声明
- 禁止遗漏声明 必须先声明后使用
# let的特征
- let 不允许在同一作用域中重复声明 (XXX has already been declared 变量重复命名)
- 修改变量中的值,由于 js 是弱类型语言,所以可以放任意类型的值
# const的特征
- 声明常量,常量也属于变量,只是我们不希望它的值被更改
- ES6 以前使用全大写表示常量
- 不允许修改值
- 声明的变量必须初始化
# 数据类型
JS 中每一个值都必须属于某一种数据类型
- 简单数据类型(原始数据类型 || 简单值)
- 复杂数据类型(合成数据类型 || 复杂值)
# 简单数据类型
ES6 以前: undefined 、 number、 string、boolean、null
# undefined
未定义,声明的变量未赋值、函数没有返回值,都是undefined 有容器,没内容
undefined 中的bug:
- let a; log a; undefined
- 变量未声明: log a; 报错 XXX 未定义
- typeof XXX :undefined
会返回 undefined 的情况:
- 变量声明未赋值
- 函数没有返回值
- 给变量赋值为 undefined
- 访问对象不存在的属性值
- return 无明确值
# null
ECMA 认为 undefined 是从 null 衍生而来的。不进行精确比较,则相等 啥都没有
console.log(undefined == null) ; //true
js 关于 null 的 bug :typeof null //object
# boolean
boolean(要检测的值) || !!要检测的值 会返回true或者false
哪些情况下会返回 false
- “ ” 空字符串 “ ” 字符串模板 “ ”
- 0
- false
- undefined
- null
- NaN(not a number 非数)
# NaN
- NaN 不与任何值相等,包括它自己
- NaN 的类型,是 number
- NaN 涉及任何计算,值都是NaN
isNaN() 检测一个值是否是非数
- 传入数字,返回 false
- 传入非数,返回 true
# string
单引号、双引号、字符串模板都可以表示字符串,但不能相互嵌套
let name = "XXX", age = "18岁";
console.log("我叫" + name + "我今年" + age);
console.log('我叫${name}我今年${age}');
1
2
3
2
3
ES6 新增: symbol
# 复杂数据类型
object
# 运算符
赋值运算符 =、+=、-=、*=、/= a += b; // a = a+b
一元运算符(自增自减运算符) ++ -- n = n + 1 n++ n = n - 1 n--
let i = 0 ; let j = i++ ; console.log(j,i); //0 1 let i = 0; let j = ++i; console.log(j,i); //1 1 let i = 5; console.log(i++ + 10); //15 console.log(i); //6
1
2
3
4
5
6
7
8
9
10
11逻辑运算符
与&& 或|| 非!
算数运算符
'+' - * / % 取模
关系运算符
"> 、 < 、 == 、 ===、 <=、 >=" === 全等 值相等,数据类型相等
三目运算符
5 > 3?alert('5大'):alert('3大'); //举个栗子
1
表达式1?表达式2:表达式3; 表达式1为 true,执行表达式2,表达式1为 false,执行表达式3;
- typeof 查看变量的数据类型