一、数据类型
1. js数据类型分为两类,基本数据类型和引用数据类型
- 基本数据类型分为七种:分别是
Number、String、Boolean、BigInt、Symbol、Null、undefined - 引用类型通常用
Object代表,数组,正则,日期,Math函数都属于Object
2. 类型转换
(1). 转为Number
-
调用Number函数
-
调用parseInt()或parseFloat()
-
使用算术运算符,除了加法以外的数学运算
console.log('12' -0) console.log('3'*'5') // 15 console.log('3'*'abc') // 无法转换,输出NaN -
+号
console.log(+false) console.log(+'50') -
toFixed方法
num.toFixed(2)
(2). 转为String()
-
调用toString() var a = 10 console.log(a.toString()) 这个方法不适用于null和undefined,因为null和undefined这两个类型的数据中没有方法,调用toString()会报错
-
调用String()函数,可以把一个变量强制转换为字符串类型 console.log(String(true)) console.log(String(false)) console.log(String(0)) 对于null值,会直接转换为字符串'null',对于undefined会直接转换为'undefined'
-
任意的数据类型+'' var a = true a=a+''
-
字符串拼接
普通的加法运算符,两边出现字符串,会变成拼接console.log(true+1) // 2
(3). 转换为Boolean()值
-
使用Boolean()函数,可以把一个变量强制转换为布尔类型 console.log(Boolean(''))
转换前 转换后 字符串 除了空串其余全是true 数值 除了0和NaN其余全是true null、undefined 都是false 对象 都是true 代表
空、否定的值会被转换为false,eg:'',0,undefined,null,NaN -
两次非运算 var a = 'hello' a=!!a //true
3.判断数据类型的方法
(1)typeof
通常用来判断基本数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,undefined,Object)
使用typeof判断null和引用类型返回的结果都是'Object'
(2)instanceof
判断参照对象A的prototype属性所指向的对象是否在被测对象a的原型链上
instanceof只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪种类型
function A(name, age){
this.name = name
this.age = age
}
a= new A('张三',18)
console.log(a instanceof B) // true
对于number,string,boolean三种基本数据类型
只有通过构造函数定义例如let num = new Number(1)定义才能检测出
(3)根据constructor判断
constructor是原型对象的属性指向构造函数,解决了instanceof的弊端,可以检测出除了undefined和null的9种类型(因为它两没有原生构造函数)
(4)通过toString.call()方法判断
二、变量声明
- var存在变量提升,可以先去声明再去使用,一个变量可多次声明,后面的声明会覆盖前面的声明
- const
- 声明一个只读的变量,声明后,值不能被改变,而且必须初始化
- 是个全局变量,或者模块内的全局变量
- let
- 不存在变量提升,生命前,该变量不能使用,否则报错。
- let声明的变量在块级作用域中
- 不能重复声明
三、js字符串
字符串常用方法
- indexof(s,n)返回指定的字符串中首次出现的位置
- lastIndexOf(s,n)返回指定字符串最后出现的位置
- charAt(n) 返回指定位置的字符串
- charCodeAt(n) 返回指定位置的字符的Unicode编码
- slice(m,n) 根据指定位置,截取子串,从m到n,不包括n
- substring(m,n) 根据指定位置,截取子串,从m到n不包括n
- substr(m,n)根据指定位置,截取子串,从m位置取,共取n个
- replace(old,new) 字符串替换
- split('s') 分割字符
- search() 检索字符串中指定的子字符串,返回第一个与字符串匹配的索引值
- match()
四、数组
js数组常用方法
- Arr.push() 向数字尾部添加一个或多个元素
- Arr.pop() 删除并返回数组的最后一个元素
- Arr.unshift() 向数组开头添加一个元素或多个元素
- Arr.shift() 删除数组的第一项,并返回第一个元素的值
- Arr.concat() 合并两个或多个数组
- Arr.join() 将数组的每一项用字符连接成一个新的字符串
- Arr.reverse() 将数组倒序,原数组改变
- Arr.sort() 将数组进行排序
// 从小到大
var sortNum = function(a,b){
return a-b
}
arr.sort(sortNum)
// 从大到小
var sortNum= function(a,b){
return b-a
}
arr.sort(sortNum)
-
arr.slice() 按条件查找
-
arr.splice(index,len,[item])有3个参数
index:数组开始下标; len:替换/删除的长度; item:替换的值,[删除操作]的话item为空;
- arr.forEach() 调用数组的每个元素,并将元素传递给回调函数
(1)在forEach中无法删除数组元素
解决方法:1.使用filter筛选符合条件的元素
2.for---改变下标控制遍历
3.逆向循环
var arr = [2, 3, 5, 7];
arr = arr.filter(item => item !== 5);
//逆向循环
var arr = [2, 3, 5, 7];
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] === 5) {
arr.splice(i, 1);
}
}
(2)forEach()无法在所有元素都传递给调用的函数之前终止遍历
forEach中使用循环无效,达到某一条件,希望跳出循环,代码不继续执行。
- Arr.filter过滤数组中符合条件的元素并返回一个新数组
- Arr.every()对每一项进行遍历,都符合返回true
- Arr.some() 对每一项进行遍历,都不符合返回false
- Arr.reduce() 接收一个函数作为累加器
- Arr.includes() 判断一个数组是否包含一个指定的值
原数组改变的方法有:push pop shift unshift reverse sort splice
不改变原数组的方法有:concat map filter join every some indexOf slice forEach