JSON对象
JSON.stringify 将 json或者json数组转换成字符串json
JSON.parse 是将 json 格式的字符串转换为 js 的对象或者数组
对象深克隆
var obj = {
a:10,
b:20,
c:{
a:10
}
};
var obj2 = JSON.parse(JSON.stringify(obj));
console.log(obj2);
obj2.c.a=20;
alert(obj.c.a);//10
1,对象的深克隆
2,缓存的存储
3,前后台数据传输解析
this 关键字 主要用于函数中 不同的场景下 指向不同
普通函数 window
function fn(){
console.log(this);
}
fn(); //window
事件函数 指向事件源
var btn = document.querySelector('button');
btn.onclick = function(){
console.log(this);//button 事件源
}
定时器 中也是window
setInterval(function(){
console.log(this); //window
},1000);
预保留this
//事件函数中嵌套了内层函数,需要在内层函数中使用this得到事件源(this指向window)
var btn = document.querySelector('button');
btn.onclick = function(){
var _this = this;
setInterval(function(){
console.log(_this);
},1000);
}
this在对象的方法中,指向 调用这个方法的对象
var obj ={
name:"小明",
act:function(){
console.log(this.name);
},
c:{
name:"小红",
b:function(){
console.log(this.name);
}
}
}
obj.act();
obj.c.b();
call() apply() bind() 可以改变this在函数中的指向
call
1,没有参数fn.call() 就相当于函数调用
2,有参数
第一个参数,就是这个函数调用时的this指向,从第二个参数开始,会当做实参传入
apply
没有参数:fn.apply() 相当于函数调用
有参数
第一个参数是函数调用时的this指向,只有两个参数,第二个参数,必须是数组,会将数组解析出来,数组的每个元素都会当成一个实参传入
bind调用,返回一个函数副本,这个函数副本中的this指向,指向了bind调用时穿的参数
es6
let声明变量
1,不能重复声明 报错
let a=10;
let a=20; //报错
2,不存在预解析 不存在声明提前
console.log(b); //报错
let b = 20;
3,增加块级作用域 {}
{
let c=20;
console.log©; //20
}
console.log©;//报错
const 声明常量
1,声明的时候就必须赋值
const A; //报错
A=10;
2,一旦赋值之后 值不能改变
const A = 10;
A = 20; //报错
注意:常量名字 一般大写(全部大写),区别于变量
箭头函数
es6 新增的一种函数的简写形式
注意:只是函数的表达式 (函数的值)
var fn = (a,b)=>a+b;
alert(fn(2,3)); */
1, 函数 无参数 需要加() 占位
let fn = ()=>alert(1);
fn();
2, 函数只有一个参数 参数可以加括号也可以不加
let fn = a=>alert(a);
fn(3);
let fn = (a)=>alert(a);
fn(3);
3, 函数有多个参数 一定 要加括号
let fn = (a,b)=>alert(a+b);
fn(3,4);
4,如果箭头函数不换行 如果不换行。,默认return 那一行代码
let fn = (a,b)=>a+b;
alert(fn(3,4));
5, 如果函数有多行代码 这个时候不会自动return,如果需要有返回值,需要你手动return 且需要{}包裹多行代码
let fn = (a,b)=>{
console.log(a);
console.log(b);
return a+b;
}
console.log(fn(3,4));
6,箭头函数中的this关键字
箭头函数没有this指向,this取决于他所在的上下文(环境)
console.log(this); //window
let fn = ()=>console.log(this); //window
fn();
document.onclick = function(){
let fn = ()=>{
console.log(this); //document
}
fn();
}
函数参数默认值
/* function fn(a){
// a=a||10;
a = a==undefined?10:a;
alert(a);
}
fn(0); */
/* function fn(a=10){
alert(a);
}
fn();
fn(2); */
// 箭头函数也支持
解构赋值 声明变量
1,数组的结构赋值
// 数组的解构赋值 按照先后顺序来的
var arr=[2,3];
// var [a,b] = [2,3];
var [a,b] = arr;
alert(a); 2
alert(b); 3
// 如何交换两个变量的值
var a=10;
var b=20;
[a,b]=[b,a];
alert(a);
alert(b);
2,对象的解构赋值
// 对象的解构赋值 是按照 属性名 key 跟顺序无关
var {a,b}={a:10,b:20};
alert(a); 10
alert(b); 20
var {a,b}={b:20,a:10};
alert(a);10
alert(b);20
模板字符串
es新增 `` 表示字符串
1,字符串是可以换行的 默认" ''是不能换行的
2,在``字符串中可以是 ${变量},这个js会解析成变量,而不是字符串,不需要拼接可以直接在字符串中写变量
模板字符串解决问题:字符串拼接
${变量} 写在字符串中,js不会解析成字符串,当做变量来解析
这个时候 字符串的 引号 要变成 ``
`` 中的字符串是可以换行的
默认的 "" ''不可以换行
展开运算符 ...
功能:可以将 某些特定数据类型 展开 如 数组、字符串、对象