3.Javascript基础

map和Object的区别

//Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现

image-20211231154537386

正则表达式

\d	匹配一个数字,等价于[0-9]
\w	匹配字母、数字或者下划线,等价于 [A-Za-z0-9_]
+	匹配前面一个表达式 1 次或者多次
*	匹配前一个表达式 0 次或多次
/g	全局匹配

JSON

JSON 是一种基于文本的轻量级的数据交换格式。前端通过将数据结构转化为为 JSON 字符串,然后将它传递到后端,后端通过 JSON 格式的字符串解析后生成对应的数据结构,以此来实现前后端数据的一个传递

JSON.stringify:将数据对象转化为 JSON 格式的字符串
JSON.parse() : 将JSON字符串解析为一个 js 数据结构

数组的方法

let c=nums.map(Math.sqrt)  map=>映射
//map对数组的每个元素依次进行处理,返回处理后的数组,不影响原数组,这里返回的是所有元素开方后的数组

nums.forEach(x=>console.log(x*2))
//forEach 用数组的每个元素调用函数,没有返回结果

nums.filter(function fn(value,index,arr){return value>3})    
//fileter用于使用函数返回筛选后的数组     
//value是必须的   index是当前元素的索引值  arr表示当前元素属于的数组对象

nums.every(x=>x>1)  //some是有一个满足就返回true
//检测是否数组每个元素都符合条件,返回true or false

nums.some(function(){return a>3})
//检测数组是否有元素符合条件,返回true 或false

let c=nums.reduce((pre,cur,index,arr)=>{},initialValue)
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)
//reduce对数组从左到右调用函数,返回结果
var  arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
}0) //注意这里设置了初始的返回值,不设置初始值没有第一行,默认从index=1开始
console.log(arr, sum);
//0 1 0
//1 2 1
//3 3 2
//6 4 3
//[1, 2, 3, 4] 10

reduceRight()
//reduceright是从右到左调用函数

nums.push()
//往数组后面添加元素,返回新的长度,改变数组

nums.pop()
//删除数组的最后一个元素,返回删除的元素

nums.shift('lemon')
//删除并返回数组的第一个元素

nums.unshift("Lemon","Pineapple")
//向数组开头添加一个或多个元素,返回新的长度

let a=concat(nums1,nums2)
//comcat 返回拼接后的数组,不影响原数组

nums.slice(start,end) //用于读取下标start(包含)到end(不包含)的数组,不改变原数组
[5,8,9,3].slice(1,3)   //[8,9]

splice //用于删除或添加,会影响原数组
//表示的意思是,从某个下标开始,删除多少个,然后添加后面的参数到该位置
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,0,"Lemon","Kiwi");
console.log(fruits)
//Banana,Orange,Lemon,Kiwi,Apple,Mango

nums1.sort(function(a,b){return a-b});
//return a-b  从小到大排序,return b-a从大到小排序 ,会影响原数组

nums1.reverse();
//反转原数组,会影响原数组

nums.isArray()
//判断是不是一个数组,返回true or false

let c=nums.toString()
//toString将数组转化为字符串,用逗号连接

var c = nums.join("");
//join不传参数默认是逗号  即join()=join(',')
//join将数组转换为字符串并以指定的分隔符号分割,
[2,3,4].join('')  //'234'

nums.find(function fn(value,index,arr){return value>3})   
//find返回符合条件的第一个元素

nums.findIndex()
//返回符合条件的一个个元素的下标

forEach和map方法有什么区别

forEach()方法会针对每一个元素执行提供的函数,对数据的操作会改变原数组,该方法没有返回值;
map()方法不会改变原数组的值,返回一个新数组,新数组中的值为原数组调用函数处理之后的值;

字符串拼接

//1.使用模板字符串   tip:字符串不能使用push
str='a' strs='haha'
b='`${strs}${str}`'  //hahaa

字符串方法

let result=s.split('t')  //将字符串根据t分割成字符串数组并返回
s.substring(from, to)//返回从from(包括)到to(不包括)的字符串

字符串、数组、数字间的转换

//字符串 >数字
let str='12345' 
res1=parseInt(str)//12345
//字符串 >数组
res2=str.split('')//['1','2','3','4','5']
[...'hello']    // [ "h", "e", "l", "l", "o" ]

//数组   >字符串
let arr=[1,2,3,4,5]
res3=arr.toString() // '1,2,3,4,5'
//数组   >数字
res4=arr.join('') //join不传参数默认是逗号  即join()=join(',')
res4_1=parseInt(res4) //12345

//数字   >字符串
let num=12345
res5=num.toString() //'12345'
//数字   >数组
res6=num.toString().split('').map(el=>parseInt(el)) //[1,2,3,4,5]

Math方法

Math.obs(-1)  //1    取绝对值
Math.floor(1.8)//1   向下取整
Math.ceil(1.2) //2   向上取整

类数组对象

//定义:类数组对象和数组类似,但是不能调用数组的方法。常见的类数组对象有 arguments 和 DOM 方法的返回结果
//常见的转化方法是通过call调用数组的方法来进行转化
Array.prototype.slice.call(arrayLike);
Array.prototype.splice.call(arrayLike, 0);
Array.prototype.concat.apply([], arrayLike);

Array.from(arrayLike);
[...arrayLike]      //扩展运算符

怎么遍历函数的arguments

//1.使用数组的方法遍历
 Array.prototype.forEach.call(arguments, a => console.log(a))
//2.arguments转化为数组

位运算符

//1.取反运算符 (~)  : 将一个数据按二进制进行“取反”运算
 当发现按位取反为负数时,就直接取其补码,补码不懂看4

//2.左移运算符(<<) :将一个运算对象的各二进制位全部左移若干位,左边的二进制位丢弃,右边补0
 a=1010 1110
 a = a<< 2 
 将a的二进制位左移2位、右补0,即得a=1011 1000。 
 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以22位就是乘以4
  
//3.右移运算符(>>) :将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
 a=a>>2     操作数每右移一位,相当于该数除以2//4.原码、补码、反码
 计算机有符号数有三种表示方法,即原码、反码和补码,最高位用01表示符号
 对于正数,它的3种码相同

负数的:

负数的反码为除符号位,按位取反   负数的补码=反码+1
例如:-10

原码:1000 1010
反码:1111 0101
补码:1111 0110

JavaScript为什么要进行变量提升

js代码分为解析和执行阶段,变量提升发生在解析的时候。

变量提升好处:
1.JS代码执行之前,会进行语法检查和预编译,预编译的时候变量提升帮助统计声明了哪些变量和函数,这样在执行到函数时预先变量分配空间,不用重新解析函数体代码,提高了效率。

2.声明提升还可以提高JS代码的容错性,使一些不规范的代码也可以正常执行,
如a=3 var a

常见的DOM操作

//1.Dom节点的获取
getElementById // 按照 id 查询
getElementsByTagName // 按照标签名查询    返回集合
getElementsByClassName // 按照类名查询	返回集合

querySelectorAll // 按照 css 选择器查询	返回集合
document.querySelectorAll('#id')[0]
document.querySelectorAll('#id').length  //返回长度
//括号里填的是css选择器  #id .class  p.class

//2.Dom节点的创建
// 首先获取父节点
var container = document.getElementById('container')
var targetSpan = document.createElement('span')// 创建新节点
targetSpan.innerHTML = 'hello world' // 设置 span 节点的内容
container.appendChild(targetSpan) // 把新创建的元素塞进父节点里去

//3.Dom节点的删除
// 获取目标元素的父元素
var container = document.getElementById('container')
// 获取目标元素
var targetNode = document.getElementById('title')
// 删除目标元素
container.removeChild(targetNode)

强类型与弱类型语言

强类型语言要求所有变量都必须先定义后使用,且不转换永远是这个数据类型  如Java和C++
弱类型语言简单理解就是一种变量类型可以被忽略的语言,如Js可以将字符串'12'和整数3进行连接得到字符串'123'
总结:强类型语言在速度上可能略逊色于弱类型语言,但是强类型语言带来的严谨性可以有效地帮助避免许多错误。

解释性语言与编译型语言

编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译

一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
与特定平台相关,一般无法移植到其他平台;
CC++等属于编译型语言。

前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。

for in与for of 使用方法及区别

// for in得到的是对象的key或数组,字符串的下标;for of和forEach一样,是直接得到值
forofES6新增的遍历方式

forin 获取的是对象的键名;  forof 遍历获取的是对象的键值,
forin 会遍历对象的整个原型链,性能非常差不推荐使用,而 forof 只遍历当前对象不会遍历原型链;
对于数组的遍历,forin 会返回数组中所有可枚举的属性(包括原型链上可枚举的属性)forof 只返回数组的下标对应的属性值;

总结: for…in 循环主要是为了遍历对象而生,不适用于遍历数组;for…of 循环可以用来遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象(Object对象没有Iterator,手动加遍历器才能遍历)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值