json
json字符串
== JSON是一种特殊的字符串格式,本质是一个字符串
== 但是长得像对象和数组,里面的key和value如果是字符串格式,都用双引号包裹(必须是双引号)
json方法
JSON.parse(json字符串):可以把json字符串转换成对象或者数组
var obj = JSON.parse(jsonObj);
var arr = JSON.parse(jsonArr)
console.log(obj);// obj就是我们的js对象
console.log(arr);// arr就是我们的js数组
JSON.stringify(对象或者数组):可以把对象或者数组转换成json字符串
var obj2 = {
a:1,b:2,gender:'男'
}
var arr2 = [
{a:1,b:2,gender:'男'},
{a:10,b:20,gender:'女'}
]
var jsonObj2 = JSON.stringify(obj2);
var jsonArr2 = JSON.stringify(arr2)
console.log(jsonObj2);// json字符串
console.log(jsonArr2);// json字符串
call/apply/bind改变this指向
- call方法
call方法是附加在函数调用后面使用,可以忽略函数本身的this指向
语法:函数名.call(‘要改变的this指向’,‘函数实参1’,‘函数实参2’,…)
-
apply方法
apply方法是附加在函数调用后面使用,可以忽略函数本身的this指向
语法:函数名.apply(‘要改变的this指向’,[‘函数实参1’,‘函数实参2’,…])
3.bind方法
function fn(a,b){
console.log(this);
console.log(a)
console.log(b)
}
fn(10,20);// 本次fn()直接调用,this是window
console.log("=======")
var obj = {name:'Jack'}
var newFn = fn.bind(obj);// bind调用的时候,不会执行fn函数,而是返回一个新的函数,这个新的函数是一个改变了this指向以后的函数
newFn(1,2);// 调用newFn(1,2) 就是调用一个长的和fn一模一样的函数,只不过里面的this指向改成了obj
区别:
+ call和apply可以改变函数里面的this指向,会立即执行函数
+ bind可以改变函数里面的this指向,返回一个新的改变了this指向的函数,不回立即执行函数
+ call和apply区别:传递实参的方式不同
let const声明
相同:
1 let和const不允许重复声明变量
2.let和const声明的变量不会在预解析的时候解析(也就是没有变量声明提示)
3.let和const声明的变量会被所有代码块限制作用域
区别:
1.let声明的变量的值可以改变,const声明的变量的值不可以改变
2.let声明的时候可以不赋值,const声明的时候必须赋值
箭头函数
-
特性:
1.匿名函数(赋值函数)才能简写成箭头函数 2.箭头函数内部没有this,箭头函数的this是上下文的this(就是他所处的环境里面的this,也就是他不会改变this) 3.箭头函数内部没有arguments这个参数集合 4.函数的行参只有一个的时候,可以不写(),其余情况必须写 5.函数体只有一行代码的时候,可以不写{},还会自动return
函数默认值:
在es6我们可以直接把默认值写在函数的行参位置
function fn(a=10){
console.log(a)
}
fn(); // 不传递参数的时候,函数内部的a就是10
fn(20);// 传递参数20的时候,函数内部的a就是20
解构赋值(就是快速的从对象或者数组中取出成员的一个语法方式)
-
解构对象
const obj = { name:'Jack', age:18, gender:'男' } // 前面的{}表示我要从obj这个对象中获取成员 // name,age,gender都得是obj中有的成员名 // obj必须是一个对象 let {name,age,gender} = obj; console.log(name) console.log(age) console.log(gender)
-
解构数组
const arr = ['jack','rose','tom']; // 前面的[]表示从arr这个数组中获取成员 // a,b,c分别对应这个数组的索引0,1,2 // arr必须是一个数组 let [a,b,c] = arr; console.log(a) console.log(b) console.log(c)
模板字符串
-
``表示字符串
-
${}表示变量
展开运算符(…)
// let arr = [1,22,333,4444,55555]
// ...arr:就是把数组的壳拆掉,把里面的内容展开出来
for in和for of
-
for in(遍历索引或成员名)
for(let key in obj){ console.log(key);// 成员名 } for(let i