目录
js的由来 :
为了在浏览器就能对数据校验 , 不浪费跟服务器交互的过程
js是支持面向对象的跨平台的脚本语言
ECMA统一成3大组成部分:DOM BOM ECMAScript
js的基本写法:
内联:在html中通过script双标签内部写js代码
行内:在html标签中通过属性写js代码
外联:将js代码写在js文件中,通过script标签的src属性引入外部js文件
script标签如果引入了外部文件就无法使用内联了
js的输出:
alert() ---- 以弹窗的形式显示
confirm() ---- 询问用户是否确认操作的弹窗
prompt() ---- 可输入内容的弹窗
document.write() ---- 以文本的形式显示
console.log() ---- 浏览器控制台输出
变量:
存储数据的一个容器
定义:
var 变量名
var 变量名 = 值
let
const
var 变量1, 变量2 = 值
变量名的命名规则:
变量名由字母、数字、下划线、美元符号组成,不能用数字开头,不能使用关键字作为变量名。
数据类型:
1.数字类型 --- number
NaN:
是一个不知道是多少的数字(表示非数字)。跟任何数据进行任何比较运算结果都是false、任何数字进行数学运算结果都是NaN。
NaN不等于任何值,包括NaN本身
isNaN(数据) 是检测一个数据转成数字是否是NaN
数据转成数字是NaN返回true
数据转成数字不是NaN(就转成了具体数字)返回false
isNaN('123abc') - 用Number工具转换的
小数计算不精准
原因:计算机内部使用二进制存储数据和运算,十进制数字要转成二进制,小数转二进制可能会造成无限死循环,最终会四舍五入保留一部分,导致存储就不精准。计算结果也不精准。
解决:
1.强制保留小数点后多少位 - 数字.toFixed(位数)
2.每个数字乘以10的n次方,计算后再除以10的n次方
强制转换:
Number() - 转成0的:'' false null [ ] , 纯数字类字符串转成具体的数字,其余都是NaN
parseInt()
parseFloat()
2.字符串类型 --- String
引号嵌套问题,单引号不能嵌套单引号,双引号不能嵌套双引号,除非转义
字符串和字符串之间,可以进行加法运算,将两个字符串进行拼接,连接成一个更大的字符串
+ 左右两边只要有一个是字符串,就会进行字符串之间的拼接
3.布尔类型 --- boolean
4.undefined --- 未定义类型
定义了变量未赋值的时候,变量的值是undefined,类型是undefined
没有实参给赋值的形参,默认值是undefined
读取对象中并不存在的属性
函数中没有返回值,默认返回undefined
函数中有return,return后没有内容,默认返回undefined
5.object
object类型,在js中有3种表现形式,分别是:
null
用[ ]定义的数据
用{ }定义的数据
function
运算符
一元运算符
只需要一个操作数
+ 正号 证号不会对数字产生任何影响
- 负号 负号可以对数字进行负号的取反
对于非Number类型的值,它将会先转换为Number,然后再运算
可以对一个其他的数据类型使用+,来将其转换为Number
算数运算
+ 加
- 减
* 乘
/ 除
% 求余
比较运算(关系运算)
通过关系运算符可以比较两个值之间的大小关系
如果关系成立它会返回true,如果关系不成立则会返回false
任何值和NaN做任何比较都是false
非数值的情况
对于非数值进行比较时,会将其转换为数字然后比较
如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串字符的Unicode编码
比较两个字符串时,比较的是字符串的字符编码 比较字符编码是一位一位进行比较,如果两位一样,则比较下一位,所以借用它来对英文进行排序
注意:在比较两个字符串型的数字时,一定要转型
在字符串中使用转义字符输入Unicode编码
\u四位编码 (16进制)
在网页中使用Unicode编码
☠ (10进制)
>
>=
<
<=
== 等于(主要用于判断两边的值是否相等)如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再进行比较
undefined衍生自null 所以这啷个值做相等判断时,会返回true
NaN不和任何值相等,包括它本身(可以通过isNaN() 函数来判断一个值是否是NaN,如果该值是NaN则返回true,否则返回false
=== 全等于(先判断两边的类型是否相等,类型相等再判断值是否相等)不会做自动的类型准换,类型不同直接返回false
!= 不等于,等于的反义词,等于为false的时候,不等于就为true
!== 不全等,全等的反义词,全等为false的时候,不全等就为true 不会做自动的类型准换
关系运算最后的结果只有两种,一种是真,一种是假,也就是布尔型的true
和false
赋值运算
+=
-=
*=
/=
%=
逻辑运算
&&(与,并且) 左右两边都为true,最后结果才为true,否则就是false
如果第一个值为true,则必然返回第二个值
如果第一个值为false,则直接返回第一个值
||(或者) 左右两边只要有一个true,最后结果就为true,否则就是false
如果第一个值为true,则直接返回第一个值
如果第一个值为false,则直接返回第二个值
!(非,取反) 将true处理为false,将false处理为true
自增自减运算
自增 变量++ ++变量
a++的值等于原变量的值(自增前的值)
++a的值等于原变量的新值(自增后的值)
自减 变量-- --变量
当碰到赋值、输出、运算的时候,符号在前就先自增自减,符号在后就后进行自增自减
三元运算符(条件运算符)
语法:
条件表达式 ? 语句1 : 语句2
执行流程:
条件运算符在执行时,首先对条件表达式进行求值
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
类型转换
类型转换分为:
强制转换:可以看出来在使用专业的工具进行了转换
隐形转换:我们在处理另一件事情,这件事情就转变了
1.强制转换
1.强制转换为数字
语法:Number(被转换的数据)
[ ], false, null,空字符串 转成0
纯数字类的字符串能转成具体的数字
其他字符串都会转成NaN
2.强制转换成字符串
语法:String(被转的数据)
{ }定义的对象转化结果 - [object Object]
[ ]定义的对象转换结果 - 去掉中括号的字符串
undefined和null不能使用toString转换
3.强制转换成布尔值
语法:Boolean(被转的数据)
数字0、空字符串、undefined、null转成false
其余都转成true
{ }定义的对象转成布尔都是true
[ ]定义的对象转成布尔都是true
2.隐形转换
+ 当左右两边有一个是字符串的时候,另一个也会隐形的转成字符串进行拼接
数学运算符号 会将左右两边的数据都转成数字进行数学运算
比较运算符 左右两边有一个是数字,另一个也会转成数字进行数字大小的比较
放在分支语句小括号中的内容会隐形转成布尔类型去判断
运算符的优先级
, 运算符
使用,可以分割多个语句,一般可以在声明多个变量时使用
例: var a , b , c
可以声明多个变量并赋值
例:var a=1 , b=2 , c=3
和数学中一样,在JS中的运算符也有优先级 , 先乘除, 后加减
在JS中有一个运算符优先级的表,在表中越靠上优先级越高,优先级越高越优先计算,如果优先级一样,则从左往右计算,
这个表不需要记忆,如果遇到优先级拿不准的情况下,可以使用()来改变优先级