一、变量
1.声明标量
var\let用于声明标量,可以同时赋值
let声明的变量有块作用域
可以同时声明多个变量
let a,b,c
let a=100,b='asd',c=ture;
变量只有在第一次用的时候用声明
变量后面的赋值会覆盖前面的赋值
var a;//声明标量a
var b=25;//声明标量b的同时赋值
可以使用typeof函数来检查变量的类型
var a=123;
console.log(typeof a);//number
2.变量名称
2.1标识符中可以含有字母、数字、下划线和%,
2.2标识符不能以数字开头。
2.3标识符不能是js的关键字
关键字:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with
保留字:
boolean、byte、char、class、const、debugger、double、enum、export、extends、fimal、float、goto、implements、import、int、interface、long、mative、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile
二、数据的类型
js中的字面量有六种类型
String 字符型
Number 数值
Boolean 布尔值
Null 空值
Undefined 未定义
object 对象
1.String 字符型
表示一串字符串,赋值时用英文双引号或者单引号
var a='我们'
\用来转义字符
\"表示"
\n表示换行
\t表示制表符
\\表示一个\
str="我说:\"我们的世界很精彩。\n我爱\t我们的世界\""
模板字符串反引号``(波浪线那里),主要用法时可以嵌入变量
let a='山东';
let b=`我爱${a}`;//我爱山东
2.Number 数值型
在JS中所有的数值都是Number类型的
包括整数型和浮点型
var a=123;
进制:
a=0b1001//二进制
a=0o10//八进制
a=0x12//十六进制
Number的几种特殊形式
①能表示的最大值:NMax=Number.MAX_VALUE//1.7976931348623157e+308
超过最大值的数为Infinity Infinity也是Number型,表示无穷大
②能表示的最小正数 s=Number.MIN_VALUE//5e-324
③非数值 s='asd'*'jkd'//NaN NaN也是Number型
2.5大整数
BigInt
数字的以n结尾,会保存为大整数类型,不取近似数
3.Boolean 布尔值
只有两种情况,true和false表示真和假,用来逻辑判断
4.Null 空值
Null的值只有一个就是null
null这个值专门用来表示一个为空的对象
用typeof来检查null值时,会返回object//那是不是说明null时是一个对象的状态???
5.undefined 未定义
undefined的值只有一个就是undefined
当我们声明一个标量并没有赋值时,就是undefined的状态
使用typeof检查时返回undefined
三、强制类型转换
1.转为string型
①调用被转换数据类型的toString()方法
--该方法不会改变原变量,它会将结果返回,需要一个变量来接收。
--数值型和布尔型会转成字符型
--null和undefined没有toString()方法。
var a=123;
a=a.toString()//因为该方法不改变原值,所以需要重新赋值给a
②调用String()函数
调用string()函数也是需要一个变量来接收返回值
a = String(a);
string()函数的底层时调用tostring()方法,当数值型、布尔型调用函数是调用的tostring()方法,当null和布尔值调用时直接返回字符型的null、undefined
③隐式转换
将数据与空字符串相加,详细情况在4-1-3;
a=true+'';//
console.log(typeof a,a)//string true
2.转为number型
①调用Number()函数
1>字符串
--纯数字的字符串,直接转换成number类型
--如果有非数字的内容,则转为NAN。
--空字符串会转成0;
2>null转成0
3>undefined转成NaN(非数字)
a = Number(a);
②parseInt()和parseFloat()
专门用来转字符串的两个函数parseInt()转成整数和parseFloat()转成小数
parseInt()函数是从左向右依次读取,遇到第一个非数值停止。
let a='123.456山东';
a=parseInt(a);//123
parseFloat()函数同样从左向右读取数值,遇到第一个小数点继续读取
let a='123.456.562山东6789';
a=parseFloat(a);//123.456
③隐式转换
a=+a;//将a转为数值型
3.转为boolean()布尔值
①字符串
空值转为false
其余是true
②数值
0和NaN转为false
其余是true
③null和undefined都是false
④隐式转换
a=!!a;//将a转为布尔值
四、运算符
1.算数运算符
①基础用法
+-*/等同于数学上的加减乘除
a=1+2; b=2-1; c=4*5; d=9/3;
**幂运算:e=5**2; //5的2次方25
%取模(取余数)f=10%3; //1
②非数值型数据用法
在计算时js会自动进行类型转换,将非数值类型的数据自动转为数值型
a=10+'5';//15,这里会将字符串‘5’自动转为数值5
true==>1 false==>0 null==>0 undefined==>NaN,NaN进行算数运算会返回NaN
③字符串的加法
字符串进行加法运算,会进行拼串处理
利用js的这个特性可以进行隐式类型转换,将数据与空字符串相加,会直接将数据转换为字符串形式。
a='hello'+'world'//helloworld
b=true+''//'true'
2.赋值运算符 =
将右边的值赋值给左边的变量;大部分的运算符不会改变变量的值,赋值运算符除外。
a +=n 等价于a = a+n;
a -=n 等价于a = a-n;
a *=n 等价于a = a*n;
a /=n 等价于a = a/n;
a %=n 等价于a = a%n;
??= 空赋值
a ??=b; 只有a是null或者undefined时,才会将b的值赋值给a;
3.一元运算符
+ 正号 不会改变数值的符号
- 负号 对数值进行负号取反
利用这一特性可以对数值进行隐式数据类型转换
let a='10';
a= +a;//a会从字符串格式变为数值型
4.自增和自减
++ --
++变量的值自增1。
let a=10;
b=a++;先赋值,再自增//b=10,a=11
let a=10;
b=++a;先自增,再赋值//b=11,a=11
-- 变量自减1,用法同自增
5.逻辑运算符
!逻辑非
&&逻辑与
||逻辑或
①!逻辑非
--对布尔值进行取反
如果时非布尔值,会先转换为布尔值再计算
利用这一特性,可以对数值进行隐式转换
let a='asda';
a=!!a;//a=true
②&&逻辑与
1>布尔值判断
--两者同时为真时返回真,否则返回假
console.log(true&&true)//true
console.log(true&&false)//false
console.log(false&&true)//false
console.log(false&&false)//false
2>非布尔值的判断
对于非布尔值,会转成布尔值之后运算,返回值不再是true和false,而是参与运算的返回值。
js的逻辑与是短路与,也就是第一项为真是,直接返回第二项的结果,第一项为假时,直接返回第一项的返回值,第二项不会执行。
10&&alert('1')//第一项为真,会执行第二项的代码,所以控制台会打印'10'
a=10&&null//第一项为真,返回第二项,a的值是null
b=undefined&&null//第一项为假,直接返回第一项,b的值是undefined
③||逻辑或
1>布尔值判断
两者同时为假时返回假,否则返回真
console.log(true||true)//true
console.log(true||false)//true
console.log(false||true)//true
console.log(false||false)//false
2>非布尔值判断
对于非布尔值,会转成布尔值运算,返回值不再是true和false,而是参与运算的返回值
js的逻辑非也是短路运算,也就是第一项为真直接返回第一项,不在执行第二项,第一项为假时,直接返回第二项。
a=10||alert('1')//第一项为真,直接返回第一项,所以a的值是10,第二项的代码不会执行
b=10||null//第一项为真,直接返回第一项,b的值是10
c=undefined||null//第一项为假,直接返回第二项,c的值是null
6.关系运算符
关系运算符用来检查两个值之间的关系是否成立,返回true或者false
>大于 <小于 >=大于等于 <=小于等于
遇到非数值类型的数据进行关系运算时,会先将其转换为数值,然后再比较。
a = 10>'5';//true
如果是两个字符串的数据进行关系运算时,会逐位比较Unicode编码
a='150'<'19';//true,因为两端都是字符串,会进行逐位比较编码,首位相同,左值第二位编码小于右值第二位的编码,所以返回true。与数学上的比较不同,需要注意
检查一个数是否在某个区间
let a=6;
b=a>5&&a<10;//返回true
7.相等运算符
==相等 ===全等 !=不相等 !==不全等
①==相等
使用相等运算符比较两个不同类型的值时,会转换成相同的类型(通常是数值)
NaN不和任何值相等,包括他自己
null和undefined相等
let a = 10=='10';//true
a=1==2;//false
a = true=='1';//true
a= null==undefined//true
a= NaN==NaN//false,NaN不和任何值相等
②===全等
全等运算符用来比较两个值是否全等
如果类型不同直接返回false
a=10==='10';
null===undefined//false
③!=不等,
用来检查两个值是否不相等
会自动进行类型转换,相当于相等的取反。
④!==不全等,
用来检查两个值是否不全等
不会自动进行类型转换,相当于全等的取反。
8.条件运算符(三元运算符)
结构:条件表达式?表达式1:表达式2
条件运算符在执行时,先对条件表达式进行求值判断,如果true执行表达式1,false执行表达式2.
a>b?console.log('a大'):console.log("b大");//b大
let max=a>b?a:b;//会返回两个变量的最大值
9.优先级
算式运算符先*/后+-
&&优先于||
利用()括号能改变优先顺序