这是我参与「第四届青训营 」笔记创作活动的第2天
Js是一个弱类型的语言
Js严格区分大小写
引入JavaScript
内部标签:在script标签中写js代码
外部标签:可以在script标签中添加src属性,(注意一定要有闭合标签不能写成自闭和的不然会出问题)
还有一个属性是type(默认值为text/javascript)
Js定义变量都用var来声明一个变量
Chrome浏览器的F12功能
Element审查元素(可以看到当前界面的html代码)
Console控制台(可以写js代码)
Sources(整个网页的资源)
Network(网络抓包)
Application(一些资源的应用)
Js的数据类型:
数字类型Number不区分浮点和整数 注意NaN(Not a Number)
字符串String 单引号和双引号都是字符串(没有区别)
字符串是不可变的
大小写转化可以直接使用对应的方法来实现
寻找某一子串的开始位置使用indexOf方法返回起始下标
获得某一个子串使用substring方法,两个参数为开始和末尾,左闭右开
模板字符串使用飘符号在中间写,$美元符号加上大括号表示占位符
多行字符串同样使用·飘字符·来表示
重复值可以使用repeat
布尔值Boolen(逻辑运算同java)
Null表示为空
Undefined表示没有定义的变量
数组Array,可以使用中括号[ ]来定义(如果下标越界了得到的就是undefined
可以包含任意数据类型
长度可以直接赋值,多了则去掉后面的元素,少了则添加undefined元素
Indexof通过元素获得下标索引
Slice就是对数组进行切片返回一个新的数组
Push和pop为在尾部添加和删除
Unshift和shift在头部进行添加和删除
排序直接使用sort进行
排序使用sort()
元素反转使用reverse()
拼接两个字符串用concat(),不修改数组而是创建一个新的数组
用特定的字符连接数组的元素,是哟个jion
多维数组的可以直接嵌套创建
查找符合某一个条件的第一个值使用find,参数为一个函数,函数内容为具体需要的条件
比较运算符
两个等于号 只判断值相同不判断类型
三个等于号是绝对等于,为真时类型和值都相同
NaN和所有的数值都不相等(包括自身,也就是NaN===NaN的值为false),可以通过isNaN()函数来判断是否为NaN
使用浮点数进行计算的时候,要注意精度问题(计算机组成的知识),所以比较两个浮点数的时候往往都是使用两个数相减的绝对值来和一个eps比较来判断是否相等的
严格检查类型,在script标签的开头添加 ‘use strict’ 声明即可,该模式下不能
声明局部变量最好使用let标识符
Js的对象使用大括号可以直接声明,格式类似于json,每一个属性之间使用逗号间隔,最后一个属性不需要逗号
Js中所以的键值对中的key都是字符串,value可以是任意值
定义一个包含四个属性的对象
使用没有声明的对象,其值为undefined,但是不会报错
可以动态删除属性,使用delete加上对象的属性,返回值为boolen类型数据
也可以动态添加属性,直接在类后面添加一个新的属性
判断某一个属性是否在类中,使用 sth. In class的格式返回一个boolen的值
Js中的foreach循环,例如在数组中有一个forEach方法,参数为一个函数,可以以该函数的方式遍历整个数组
或者可以使用循环结构获得每一个下标索引
也可以使用forof来遍历每一个元素
Js的集合Set和Map
Map:
Set方法可以添加元素也可以修改元素
get可以获取某一键值对的值
有一个点需要注意,就是直接使用中括号添加的映射关系,Map的大小不会变化
Set
Add添加元素
具体功能可以直接查文档或者看描述
Iterable相关:
Forin,forof和foreach的区别:
Forin主要是遍历下标
Forof是遍历元素值
Foreach是根据自定义的参数来遍历
函数和方法:
方法是在对象中的(对象中有两个,一个是属性,一个是方法)
JavaScript的函数
有两种定义方式
这是用匿名函数的方式定义函数,可以通过变量名来调用该函数
或者使用该方式来定义一个函数,两个定义方式是等价的
可以通过抛出异常的方式来规避没有参数传入的情况
Arguments是一个内置参数,表示所有传入的参数的数组
如果要表示除已知参数之外的参数,可以使用rest定义函数
此时rest根据传入的参数不同表示不同的涵义,如果参数个数为0或者1
则rest没有元素,如果多余1则rest为除了x的所有其余参数
变量的作用域和java差不多
具体作用域为一个大括号内,如果在二级大括号内有相同的变量名,二级括号内会先覆盖外括号的变量
不过js的代码在声明变量的时候尽量放到函数或者方法的头部
规范:所有的全局变量都会绑定到window上
如果出现命名冲突,可以将自己的所有代码放到一个名字空间中
局部作用域
例如在for中如果使用var来定义变量,则除了作用域还能生效。所以要使用let
常量使用const来定义