赞
踩
语法:函数名.call(要改变的this指向,函数参数1,参数2....)
对象方法.call(this指向的新对象,参数1,参数2...)
函数名.apply(this指向新对象,[参数1,参数2…])
对象方法.apply(this指向新对象,[参数1,参数2…])
<script>
var obj={
name:'jack'
}
function fun(m,n){
console.log('m',m,'n',n);
console.log(this);//window->obj
}
fun.apply(obj,[10,20])
</script>
var 新函数 = 函数名.bind(this指向新对象)
var 新函数 = 对象方法.bind(this指向新对象)
新函数(参数1,参数2)
<script>
var obj1 = {
name:'rose'
}
var obj = {
name:'jack',
say:function(){
console.log('this -> ',this) // 改变当前this(jack)指向 (rose) obj1
}
}
// obj.say()
obj.say.call(obj1) //对象方法也叫函数名
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>充电宝示例</title>
</head>
<body>
<script>
const jackObj = {
name: 'jack', //姓名
phoneBattery: 70, //手机电池电量70%
// 给手机电池充电
change: function (batteryNum) {
this.phoneBattery = batteryNum
},
}
const roseObj = {
name:'rose', //姓名
phoneBattery:10, //电池电量10%
}
// rose想借用jack的充电宝充电? 实际就是使用jackobj对象的chanage方法
console.log('rose充电前电量 ',roseObj.phoneBattery);
jackObj.change.call(roseObj,80)
console.log('rose充电后电池电量 ',roseObj.phoneBattery);
// jackObj.change(90)
// console.log(jackObj.phoneBattery);
</script>
</body>
</html>
ES6可以统称2015年后javascript所有最新版本
let 和 var
1.考虑兼容问题
使用var
2. 变量可以多次改变值
let
3. 变量只赋值一次后,不再改变
const
const button = document.quererySelctor(‘button’) 如获取节点,一般都是不变的
声明函数也可以用const
箭头函数是 ES6 里面一个简写函数的语法方式
重点: 箭头函数只能简写函数表达式,不能简写声明式函数
语法: (函数的行参) => { 函数体内要执行的代码 }
形参只有一个, 括号可以省略
(m)=>{ } == m => { }
函数体只有一行代码 大括号省略
() => {console.log(‘>>>’)} === () => console.log(‘>>>’)
只有一行代码,并且代码是return语句,大括号和return都可省略
()=> {return 100} === () => 100
btn.addEventListener('click', function () {
console.log('this -> ', this) // 事件源btn
// 对象方法中this所在的上下文环境 是 btn
const obj = {
name: 'jack',
say: ()=>{
console.log('obj this -> ', this) // 对象方法中this->上下文环境 btn
},
}
obj.say()
})
<script>
<!--
(function(形参){
//函数体
})(实参)
cb = function(){
console.log(this.len)
}
-->
var len = 117
let func = {
len: 935,
showLen: function () {
console.log(this.len) // 自调用函数中this->window 117;
},
show: function () {
let obj = this;
(function (cb) { //自调函数
//函数体
cb() //调用函数showLen
})(this.showLen) //实参this.showLen==func.showLen
},
}
func.show()
//拿到 len=935
<script>
var len = 117
let func = {
len: 935,
showLen: function () {
console.log(this.len) //935
},
show: function () {
let obj = this; //func
(function (cb) {
cb.call(obj) //改变自调函数的指向,改为func
})(this.showLen)
},
}
// func.showLen()
func.show()
就是当我不传递参数的时候,使用默认值,传递参数了就使用传递的参数
就是快速的从对象或者数组中取出成员的一个语法方式
let { name, age } = obj 注: 大括号中变量名必须与对象属性名相同
当属性与值的变量同名时。可以只写一个
语法:let sym = Symbol(描述符) 描述符—提供当前symbol表示的含义
作用:保证每个属性的名字都是独一无二,避免冲突
注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
let set =new Set() //空集合
let set = new Set([1,2,{name:'jack'},function(){}]) //可以存任一类型
属性与方法
- size 获取集合中数据数
- add 向集合追加数据
- delete 删除集合中数据
- clear 清空集合中所有元素
- forEach 遍历集合数据
- 集合转数组
![在这里插入图片描述](https://img-blog.csdnimg.cn/bcb468a1a4874d0a98d633d30dcc0e31.png)
集合set转数组Array
let set = new Set([10,20,30])
console.log(set);//{10, 20, 30}
let arr = [...set]
console.log(arr) //[10, 20, 30]
console.log(arr[0]) //10
let arr=[11,32,43,21,11,32,43]
let set = new Set(arr)
arr=[...set] //两句结合成一句arr = [..new Set(arr)]
//代码越少,出错越低
console.log(arr)
以前写法:indexOf + includes 定义一个新数组,存储不重复元素,遍历原数组,判断新数组是否存在原数组元素,不存在加入新数组。
或者 双重for + splice
作用:是一个数据集合,是一个很类似于对象Object的数据集合
- Map存储的数据也是key/value形式, key可以是任意类型,数字字符串都可
创建:
let map = new Map()
let map = new Map([ [‘name’,‘jack’], [{name:‘啊啊’},{value:11}], [100,18],[true,'成立 ']]) 一个key/value值用[ ]括起来
注:每一项必须用 [ ] 隔开,let map = new Map([[key,value],[{key},{value}],[key,value] ]) 逗号前就是key,逗号后是value
key/value形式 :
let map = new Map([ [‘name’,‘jack’], [{name:‘啊啊’},{value:11}], [100,18],[true,'成立 ']])
属性和方法
- size 获取集合中数据数
- set 向集合追加数据
- delete 删除集合中数据
- clear 清空集合中所有元素
- get 用来获取该数据集合中的某一个数据
- has 用来判断数据集合中是否存在某一个数据
特点: 查找存储在map中的数据,可以不用遍历,根据key值直接获取
value = map.get(key)
//找到16对应的name
<script>
let arr=([
{name:'啊啊',value:11},
{name:'啊',value:61},
])
let map = new Map()
arr.forEach(item=>{
map.set(item.value,item.name) //遍历数组,转变为map类型
})
map.set(true,'成立')
map.set('name','jack')
map.set({name:'啊啊'},{value:11})
console.log(map);
console.log(map.get(61)); //啊
let map1 = new Map([ ['name','jack'], [{name:'啊啊'},{value:11}], [100,18],[true,'成立 ']])
console.log(map1);
</script>
let map = new Map([
['name', 'jack'],
[100, 18],
])
console.log(map.size)
//添加元素
map.set(true, '成立')
//获取元素
console.log(map.get('name'))
//删除元素
map.delete('name')
//清除所有元素
map.clear()
//判断集合是否有数据
let isHas = map.has('name')
}
for(let v of arr){
//遍历数组 v表示:数组元素
console.log(v)
}
for(let v of str){
console.log(v)
//遍历字符串 v表示:字符串元素
}
let arr = [10, 20, 30, 40]
for (const v of arr) {
console.log(v)
}
let str = 'hello'
for (const v of str) {
console.log(v)
}
let map=new Map([['姓名','小红'],['年龄','17']])
for (const v of map){
console.log(v)
}
//以前:
//遍历对象
for in eg: for(let key in obj) { console.log(key,obj[key])}
遍历数组,字符串, Map
let map = new Map([['hello','aaa'],])
前端模块化开发中:一个js文件就是一个模块,在js文件模块中定义的数据是私有的, 可以向外部暴露数据和方法,其它js文件模块可以引入暴露的方法数据进行使用。
//a.js
let num = 100
//直接在需要暴露的方法前加export
export const getMax = function(m,n){
let max = m
if(n>max){
max=n
}
return max
//export {getMax,num}
}
//b.js
const getSum = function(){
return 100
}
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>最大值是><span></span></p>
<script type="module"> //表示下面使用的是模块化语法
import {getMax} from './a.js' //引入a.js模块的getMax方法
let max= getMax(209,30)
//显示最大值
const spanEle=document.querySelector('span')
spanEle.innerHTML = max
</script>
</body>
</html>
//c.js
export default {
name:'jack',
age:18
} //暴露对象、函数
//export default function(){}
//index.html
<script type="module">
import jackObj from './c.js' //引入名字可以自定义
console.log('jackObj',jackObj);
</script>
javascript引擎负责执行javascript代码,
如果发现错误代码,抛出异常错误, 如果异常错误没有处理语句,继续向上抛,直到系统处理
系统处理方式: 终止程序执行,错误语句下面的语句将不执行,在控制显示异常错误信息
Error实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象。也就是说,存在Error的6个派生对象。
**
try{
// 可能发生异常的代码
}catch(error){
console.log(error) //error是错误信息
}
try {
const num = 100
num = 200
} catch (error) {
console.log('程序出错了 :')
} finally{
console.log('不论程序有无出错,都会执行')
}
try…catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。
作用:资源的回收
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。