8.19 学习日志

-let -const

用于es6,主要是有块级作用域,用let修饰的变量只存在于块级作用域,用const修饰的变量只能在声明的时候完成初始化,后续不能被修改
1.不能先使用在声明
2.不能重复声明
3.有块级作用域

{
				let a=20
				var b=30
			}
			
			console.log(b)			//30
			console.log(a)			//报错

var 修饰的变量相当于在全局中声明,但是let修饰的变量只存在于当前作用域,所以无法访问到.

var arr = [{
				name: "karen"
			}, {
				name: "jack"
			}, {
				name: "marry"
			}]
			for (var i = 0; i < arr.length; i++) {
							(function(index) {
								arr[index].onclick1 = function() {
									console.log(index)
									console.log(arr[index].name)
								}(i)
			
							})(i)

			}

做出函数来遍历数组里面的变量,因为for中的i是用var来修饰的,所以只能做成闭包的形式,如果不这样,在函数外部访问就访问不到里面的i,但是如果使用let,就可以很好的解决这个情况

for (let i = 0; i < arr.length; i++) {
				arr[i].onclick1 = function() {
					console.log(i)
					console.log(arr[i].name)
				}(i)
			}

用let修饰的变量很像函数的变量,里面代码块能够访问到外面代码块的变量,但是外面访问不到里面变量的值

const a =20;
a=100;
console.log(a);

这样会报错,因为a是由const修饰的,所以是不能修改的,他和之前的直接修改object的__proto__属性不同,后者不会报错,但是没有用,用const直接就会报错


var flag=true
if(flag){
	var a=20
	const b=30
}

console.log(a)		//20
console.log(b)		//报错

const也是有块级作用域的,他只在声明直接的作用域有效,很好的避免的全局变量被污染的情况(使用块级作用域后),但是虽然说不能被改变,但是如果他是一个数组,一个对象,可以添加属性进去,只是地址不被改变,里面的属性是可以改变的

const a=[]
a.push(100)
console.log(a)


const obj={}
obj.age=18
console.log(obj)

拷贝的区别:深拷贝和浅拷贝
深拷贝相当于重新开拓一块空间,在这空间里面讲要拷贝的数据原模原样的添加进去,浅拷贝只是申明一个变量,让这个变量的指针指向这块空间

浅
var a=[]
var b=a
b[100]=100
console.log(a)

深
var a=[1900,200,3004]
var b=[]//[...a]
a.forEach(function(el) {
	b.push(el)
})
b.push(999)
console.log(a,b)

解构赋值

var {
				name1
			} = {
				name1: "karen"
			}
			console.log(name1)

打印出来的结果是name1所带的值karen

var arr={a:[10,203,0]}
			var {a:[b]}=arr;
			console.log(b);			//10

将要解构的对象放在等号后面,将要取的值放在前面,属性名必须要对,要去的值用变量表示,打印这个变量就是打印出来这个值

var arr=[{name:"karen",age:"18",its:[{name:"css",age:59},{name:"js",age:99}] } ]
			
			let[{name,age,its}]=arr
			{
			
			  let[{name,age}]=its
				console.log(name)
			}
			
			console.log(name)

要想学好这个,就去网上拿一个大数据,将里面的属性全部解构出来,

map

var arr = [100, 20]

			var m1 = new Map()
			m1.set(999,arr )
			console.log(m1)

set方法,将括号里面的arr set进去,然后如果需要访问他,他的keys是999
get方法,将set进去的值取出来

m1.set("name","karen")
			console.log(m1.get("name"))			//karen
for ([k,v] of m1) {
				// console.log(s[0],s[1])
				console.log(k,v)
			}

这段代码就是将解构和map结合在一起,map中有一个属性[[Entries]],他是一个数组,将我们存的keys和value存在里面
在这里插入图片描述

for ([k,v] of m1) {
				console.log(k,v)
			}
			
			console.log(m1.entries())
			for ([k,v] of m1.entries()) {
				console.log(k,v)
			}
			console.log(m1.keys())
			console.log(m1.values())
var arr=[["name","karen"],["name1","karen1"],["name2","karen2"]]
			
			var m2=new Map(arr)
			console.log(m2)

map会帮我们把数组解析出来,前面的值为keys,后面的值为value,如果,有3个,那么后面的不会被放入value,

var m2=new Map()
			m2.set("name","karen")
			m2.set("name2","karen2")
			m2.set("name3","karen3")
			var arr=Array.from(m2)//把容器转化为真数组
			console.log(arr)

在这里插入图片描述
在这里插入图片描述
Array.from会将()的东西转化为真数组
重点 …xx
2个用法
…xx xx是已知的容器名字:把容器中数据取出来: var arr=[1,2,2,1,3];var arr2=[…arr]
…xx xx是自己取的名字 在解构赋值中把容器中剩余数据取出来,给剩余数据去个xx的名字
let {name,…xx}={name:“karen”,age:18,rank:580};
function log(num1,…arg) {
console.log(num1,arg)
}
log(100,200,300,400)

set

set容器可以看做数学里面的集合,集合里面的数据不会重复,

var s1=new Set()
			s1.add(100)
			s1.add(100)
			s1.add(200)
			console.log(s1)		

在这里插入图片描述

var arr=[1090,20,30,405,0,0,0,0,0,0,0]
		var s2=new Set(arr)
		console.log(Array.from(s2))

将数组中重复的值去除

var a = new Set([1, 2, 3]);
		var b = new Set([4, 3, 2]);
		var union = new Set([...a, ...b]); // {1, 2, 3, 4}
		console.log(union);

取数组的并集

取数组的交集

var a=new Set([1,2,3,4,5])
		var b=new Set([2,9,3,10])
		var arr=[...a].filter(function(x) {
		  return b.has(x)
		})
		console.log(arr)

filter会通过返回值,如果true,将这个value放入容器,如果为false则不放入,has函数是判断后面的值是否在前面的容器中有,

字符串

var str1="6480950"
		var re=str1.padStart(11,"0991")
		console.log(re)		//099106480950


var re=str.repeat(10)
		console.log(re)
			//重复10次
String.prototype.mypadStart=function(count,str) {
			var arr=this.split("")
			var dataArr=str.split("")//["a","b","c","d","e"]
			var index=0
			while(true){
				index%=dataArr.length	
				// console.log(index)
				arr.splice(index,0,dataArr[index])
				index++
				if(arr.length==count){break;}
			}
			
			return arr.join("")
		}
		
		var str="hello"
		var re=str.mypadStart(20,"abcde")
		console.log(re)

设计一个工具,让一个字符串被填充到20位,以abcde来填充

math

var re=Math.cbrt(27)
			console.log(re)

取立方根

var a=-10
			var b=-20
			var re=Math.imul(a,b)
			console.log(re)

乘法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值