js笔记整理
初识JavaScript
1.js特点
-
-
单线程语言
-
弱语言
-
解释型脚本语言,代码不需要编译;
-
跨平台
-
基于对象,使用JavaScript不仅可以创建对象,也能操作使用已有的对象
2.数据类型
-
number类型(所有的数值)
-
字符串类型 String (单引号 双引号 都是字符串)
-
boolean类型 (true false)
-
null 空类型 (是null值的情况)
-
undefined 未定义 (当前没有给值)
-
object (对象类型 引用数据类型)
-
Symbol (创建私有成员、防止属性名冲突,Symbol的值是唯一的、独一无二的,不会重复。)注意:不支持语法
new Symbol()
es6新增 -
Bigint (比Number的范围要大的多,使用方法:bigint(”125555444541216445“)
五种基本类型:Undefined、Null、Boolean、Number和String
引用类型主要有:Object、Array、Function、RegExp、Date
使用typeof来查看对应的类型(基本数据类型返回的是对应的类型名 null类型object)
3.进制转换
常用的进制 二进制(计算机能识别的基础) 四进制 八进制 (逢8进1)十六进制(逢16进1) 十进制(常用的)
十进制转二进制 (除2取余法)
二进制转十进制 根据对应的位数乘以对应的2的次方将所有值相加
十进制转8进制 (除8取余)
十进制转16进制 (除16取余)
toString方法和对应的parseInt方法 里面的参数可以填可以不填 不填默认转为10进制
通过拿到8进制 16进制 2进制的内容得到一个十进制的数(parseInt parseFloat)
//将对应的8 或者 16进制等转为10进制的数值 var number = "30" //八进制的内容 //将对应的八进制30转为10进制 console.log(parseInt(number,8)); var str = '6a' console.log(parseInt(str,16)); //前面写了0x表示当前是16进制数 var str = '0x6a' console.log(parseInt(str)); //前面写0的情况下 他会转为对应的8进制或者是10进制 具体看后面的参数 var str = '061' console.log(parseInt(str,8));
将10进制的数值转为对应的8 或者 16进制的字符串 (toString)
//将10进制的数值转为对应的8 或者 16进制的字符串 //toString var number = 24 //将对应的10进制转为8进制 console.log(number.toString(8)); //将对应的10进制转为16进制 console.log((106).toString(16));
条件控制语句及表达式
1.运算符
-
() 前面不能直接写++
console.log(++(a--)); //() 不能和++ 一起使用 ===>报错
-
字符串和数值进行比较(字符串会自动转为数值)
-
出现NaN 一般都是false
-
undefined是null的派生所以对应的值是相等的
//undefined(null的派生子类) 和 null console.log(undefined==null);//true console.log(undefined===null);//false
-
布尔类型的值和null进行比较
//boolean类型的值和null进行比较 自动转数值(出现NaN是false) console.log(true>null);//true console.log(true>undefined);//false ==>undefined转为数值为NaN
-
null值及undefined跟0进行比较
//undefined和0进行比较 console.log(undefined == 0);//NaN false //null是空对象引用 对应的是一个引用类型 引用类型比较的是地址 null和0进行比较 console.log(null == 0); //false
逻辑运算符
//逻辑运算符 && 短路与 &断路与 || 短路或 |断路或 ! //&& 所有的同时满足才为真 && 只要前面有一个是假后面的就不会看了 & 看完全部 var a=10,b=20,c=30 console.log(a>b && b<c);//false console.log(c>b && b<c);//true //|| 有一个是true就是true 前面只要出现了true 就不看后面的 | 看完全部 console.log(c>b || a>b);//true //! 取反 console.log(!c>b || a>b); //false console.log(!(c>b || a>b)); //false // || 常用 有一个是true 取true console.log(a>b || 20); //20 var i = 0 || 10 console.log(i);//10 //如果俩个都是false 取最后一个 var str = undefined || '' console.log(str);//'' //如果俩个都是true的情况下 取第一个为true的 var str1 = "A" || "B" console.log(str1);//A var str2 = "" || 'false' || 'true' console.log(str2);//false字符串 //三目运算 逻辑运算优先级会高于三目运算符,因此需要用括号括起来 var str3 = (10 > 20 ? '' : '123') || (30 > 20 ? '' : '456') console.log(str3);//123 //如果出现false 直接取false 如果全是true 取最后一个 var str4 = 10 && 20 //20 var str5 = undefined && '' //undefined //转成boolean类型 var str6 = !123 //false console.log(str4);//20 console.log(str5);//undefined console.log(str6);//false
数组
数组的方法
-
push 添加到数组的最后一个
-
pop 删除最后一个
-
shift 删除第一个
-
unshift 添加到数组的第一个
-
reverse 反转数组
-
sort 将数组升序排列
-
splice 数组删除 splice(开始下标,删除数量)
-
slice 数组截取 slice(开始下标,结束下标) ===> 包含开始不包含结束下标
es5新增数组方法(高阶函数)
forEach 遍历
var arr = [1,2,3,4,5] //forEach 遍历的 value表示里面的值 index表示里面的下标 array表示当前遍历的数组 var forEachObj = arr.forEach(function(value,index,array){ console.log(value); //打印里面的值 1,2,3,4,5 console.log(index) // 打印下标 0,1,2,3,4 console.log(array) //当前遍历的数组 [1,2,3,4,5] })
map 遍历
//map 遍历的 value表示里面的值 index表示下标 array表示当前的遍历的数组 var mapObj = arr.map(function(value,index,array){ console.log(value); //打印里面的值 1,2,3,4,5 console.log(index) // 打印下标 0,1,2,3,4 console.log(array) //当前遍历的数组 [1,2,3,4,5] return value+1 })
forEach和map的区别
-
forEach没有返回值 里面没有return
-
map有返回值 所以里面可以使用return关键词 他的返回值是一个数组
reduce 从左到右计算的 reduceRight(从右到左计算)
//pre 前一个值 current 当前值 index 下标 array 数组 //reduce函数 利用前一个和后面值进行运算的操作 得出对应的值 var sum = arr.reduce(function(pre,current,index,arr){ return pre+current }) console.log(sum);
filter 过滤的
//filter返回的是一个数组 value index arr var filterArr = arr.filter(function(value,index,arr){ return value>3 }) console.log(filterArr);
some 有一些满足就返回true 否则返回false
//some 一些 every 每一个 var value = arr.some(function(value,index,arr){ return value>4 }) console.log(value);//true
every 每一个满足就返回true 否则返回false
var value = arr.every(function(value,index,arr){ return value>4 }) console.log(value);//false
indexOf 返回对应的下标
lastIndexOf 返回对应的下标
console.log(arr.indexOf(1,2));//从下标开始找 找这个1这个数字第一次出现的位置(左到右) console.log(arr.lastIndexOf(1,5));//从下标5开始找 找1第一个次出现的位置(右到左)
es6新增数组方法
find 查找
findIndex 查找下标
var li = Array.from(lis).find(function(li){ return li.innerText == '5' }) //找到对应匹配的元素 console.log(li); //findIndex 查找对应的元素的下标 返回第一个找到的元素下标 var index = Array.from(lis).findIndex(function(li,index,arr){ return li.innerText == '5' }) console.log(index);
静态方法(使用类名.)
Array.of() 将一组数据转为数组
Array.from() 将伪数组转为数组
var array = Array.of(1,2,3,4,5) console.log(array); //具备某些数组的特性的对象称为伪数组 arguments NodeList HTMLCollection等 var lis = document.querySelectorAll('li') // 伪数组是不具备数组的函数的 Array.from(lis).forEach(function(li){ console.log(li.innerText); })
函数
在程序执行之前有个预编译过程
预编译会做的事情
1.他会声明对应的function和var关键词修饰的变量(开辟内存的操作)
2.对应的function的内存空间开辟以后他会将对应的代码块放到其中 等待调用
3.var 修饰的关键词 只会开辟一个空间 并不会进行赋值(默认给他的一个undefined的值)
字符串
为什么string可以拥有方法
var realMessage="Said I love you but I lied"; var myMessage=realMessage.substring(5,15); console.log(myMessage); //"I love you"
在执行到realMessage.substring(5,15)这行代码时,发生了很多事。
首先,它会从内存中读取realMessage的值。当处于这种读取模式下的时候,后台就开始干活了。JS高程是这样描述后台完成的这些动作的:
-
创建String类型的一个实例;
-
在实例上调用指定的方法;
-
销毁这个实例
其实不是基本类型string执行了自身方法,而是后台为它创建了一个对应的基本包装类型String,它根据基本类型的值实例化出了一个实例,让这个实例去调用指定方法,最后销毁自己
字符串方法
通过下标找字符串(char 字符)
charAt(下标)
var str = 'abc' str.charAt(0) //返回的是a
charCodeAt (ACSII码)
var str = 'abc' str.charCodeAt(0) //返回的是97
通过字符串找下标(找不到返回-1 找的到返回对应的下标值 number(第一次出现的))
indexOf
var str = 'abc' console.log(str.indexOf('ab')) //返回的下标0 console.log(str.indexOf('d')) //找不到返回-1 //可以有俩个参数 第一个参数为 对应需要查询的字符串 第二个参数为 开始查找的下标 console.log(str.indexOf('b',2)) //从下标2开始找 找第一个出现b的位置 返回-1 var str = 'abbbccde' console.log(str.indexOf('b',2)) //从下标2开始找 找第一个出现b的位置 2
lastIndexOf
console.log(str.lastIndexOf('b')) //3 console.log(str.lastIndexOf('b',0)) //-1 从0的位置往前找 console.log(str.lastIndexOf('b',4)) //3 //也就是说默认的情况下 对应的后面的下标可以省略 str.length-1
search 方法(和indexOf一样 支持正则表达式)
var str = 'abc' console.log(str.search(/ab/)) //0 /ab/正则表达式 console.log(str.search(/ab/,0)) //从0的位置开始找 匹配ab的内容
静态方法(通过构造方法名直接调用的叫做静态方法 他是对应的static修饰的)
fromCharCode 将对应的ascii码转为字符串
var str = String.fromCharCode(97) //返回的是一个字符串 console.log(str) //a
concat 将多个字符串转为连接成一个字符串返回
var str = 'hello'.concat('world') console.log(str)//hello world
支持正则的方法(4个)
search 查找(找到返回下标 没找到返回-1)
var str = "abcacc" //默认只找第一个匹配的 加入到数组 var arr = str.search('a') console.log(arr);//0 返回找到的第一个下标
replace 替换 (将找到的第一个字符串替换成一个新的字符串)
var str = 'abca' var str1 = str.replace('a','hello')//将a替换成hello console.log(str1)
split 分割(返回数组)
//分割 成为一个数组 split 数组变成字符串 join (默认以,连接) var str = '1,2,3' //默认不是以,作为分割 默认不分割 直接填入到数组 console.log(str.split()); //['1,2,3'] console.log(str.split(',')); //['1','2','3']
match 匹配(返回数组)
//match 返回一个数组 (匹配的内容) var str = "abcacc" //默认只找第一个匹配的 加入到数组 var arr = str.match('a') console.log(arr);//[a]
截取的方法
substring(开始的下标,结束的下标)
substr(开始的下标,个数)
//截取的方法 substring substr var str = "abcdef" //substring(开始的下标,结束的下标) 不包含结束的下标 console.log(str.substring(1));//bcdef console.log(str.substring(1,3));//截取不包含最后一个下标 (默认不填str.length)bc // substr(开始的下标,截取的个数) console.log(str.substr(1));//默认的情况是截取到最后 bcdef console.log(str.substr(1,3));//从下标1开始截取 截取个数为3个 bcd
转大写 (toUpperCase)
var str = 'abcA' console.log(str.toUpperCase())
转小写 (toLowercase)
var str = 'abcA' console.log(str.toLowerCase())
将数组转为字符串方法(join)
特点:
-
如果数组中有undefined或null会被转换为空字符串
-
如果元素为对象,则调用对象的toString方法抓获为字符串
console.log(['a', 'b', 'c'].join()); // 'a,b,c' console.log(['a', 'b', , 'c'].join('+')); // 'a+b++c' console.log(['a', 'b', null, 'c'].join('+')); // 'a+b++c'