一些问题记录

本文详细介绍了JavaScript中的ES6新特性,包括块级作用域、let、const定义的变量规则以及箭头函数的特点。同时,探讨了数组的方法如fill、forEach和includes,并阐述了Vue组件的生命周期、父子组件通信以及Axios的拦截器配置。还涉及前端安全问题,如XSS攻击的防御措施和JSONP的跨域请求原理。
摘要由CSDN通过智能技术生成

        ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。

         ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。

  1. var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
  2. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  3. const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
  4. const 定义的对象属性可以被改变,const仅保证指针不发生改变,修改对象的属性不会改变对象的指针,所以是被允许的。
const person={
    name:'abc',
    sex:'男'
}

person.name='aaa'//此种修改不会报错

const person={
    name:'abc',
    sex:'男'
}

 person={
    name:'abc',
    sex:'男'
}//会报错

箭头函数和普通函数的区别

箭头函数是匿名函数,不能作为构造函数,不能使用new

没有原型属性,不能当作Generator函数,不能使用yield关键字

不绑定this,会捕获其上下文的this;普通函数的this指向调用它的对象

数组的方法

array.length

array.isArray();    //判断是否是数组

array.concat();//合并数组

array.fill()

  • 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素
arr.fill(value, start, end)
ar numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]

array.forEach();

array.includes();//判断数组是否包含指定值 ,返回true、false

a.indexOf();//判断数组是否包含指定值 ,返回0,-1

a.join();  //将数组的所有元素转为字符串

let a=['a','b','c'];
a.join();
=> 'a','b','c'

a.map();

a.pop();//删除数组最后一个元素

a.push();//添加元素到数组末尾

数组方法汇总 数组常用方法汇总_Gkuankuan的博客-CSDN博客_数组方法

浅拷贝和深拷贝

a和b两个对象,a有值b为空,b=a; 修改a,b一起改变==》浅拷贝

a改变,b不改变 ==》深拷贝

原理

前端【JS】,深拷贝与浅拷贝的区别及详解! - bug开发施 - 博客园

vue生命周期-创建,数据初始化,挂载,更新,销毁

beforeCreate

created

beforeMount

mounted(写方法)

beforeUpdate

updated(更新)

beforeDestroy

destroyed

如果使用keep-alive,会增加activated,deactivated生命周期


父传子  props
子传父  emit

兄弟组件传值

1、子传父,父传子

2、vuex

3、eventBus

在兄弟组件A,B中引入eventBus.js文件,A组件

methods:{
    changesize(){
        eventBus.$emit('add',this.arg)
    }
}

B组件

created(){
    eventBus.$on('add',(message)=>{
        //一些操作,message就是从top组件传过来的值
        console.log(message)
    })
},

axios 拦截器

1 请求拦截器

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
    // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
    const token = window.localStorage.getItem("token");
    token && (config.headers.Authorization = token);
    return config;
  },
  error => {
    return Promise.error(error);
  }
);

2 响应拦截器

axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
  // 下面列举几个常见的操作,其他需求可自行扩展
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面,并携带当前页面的路径
        // 在登录成功后返回当前页面,这一步需要在登录页操作。
        case 401:
          vant.Toast.fail("身份验证失败,请关闭重新进入。");
          break;

        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面
        case 403:
          vant.Toast.fail("登录过期,请关闭重新进入。");
          // 清除token
          break;

        // 404请求不存在
        case 404:
          vant.Toast.fail("您访问的网页不存在。");
          break;
        // 其他错误,直接抛出错误提示
        default:
          vant.Toast.fail(error.response.data.message);
      }
      return Promise.reject(error.response);
    }
  }
);


v-if  动态显示隐藏 多次
v-show  通过css显示隐藏 一次

v-model其实是个语法糖,它实际上是做了两步动作:
1、绑定数据value
2、触发输入事件input

  <input type="text" v-model="username">
  <input type="text" :value="username" @input="username=$event.target.value">

JsonP跨域请求 

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

关于闭包

「每日一题」JS 中的闭包是什么? - 知乎

「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。

function foo(){
  var local = 1
  function bar(){
    local++
    return local
  }
  return bar
}

var func = foo()
func()

回调函数

回调函数是把函数当做参数进行传递,并执行,一般都是作为最后一个参数进行传递的,这样可以需要的时候就传递进去,不需要的时候不传递,回调函数内部也可以传参数,回调函数的命名一般都为callback,也可以命名其他名字

function request(a,b,cb){
console.log(a)
cb()
console.log(b)
}
request(1,2,()=>{
console.log('hahha')
})


 

前端安全漏洞及处理
xss跨站脚本攻击
1 对数据进行HTML编码,使脚本代码变成普通字符串
2 此外还有URL,json编码
3 设置http头

iframe攻击
1 设置安全属性sandbox
    如设置sandbox为空,将严格限制iframe的权限,会跨域

点击劫持:将iframe页面设置透明置于正常页面上方

错误的内容响应
攻击者将js脚本当做图片上传,而后被浏览器误读
可以设置X-Content-Type-Options这个HTTP Header明确禁止浏览器去推断响应类型。

第三方依赖包漏洞

使用工具扫描

使用SSL Stripping是https降级成http

在http header预加载,强制使用https

Strict-Transport-Security: max-age=<seconds>; includeSubDomains; preload

本地存储数据泄露

1 加密储存

缺乏静态资源完整性校验

为提高访问速度,将静态资源放在CDN上,因此产生被劫持污染文件的风险

使用SRI功能,在资源文件中加入SRI值,浏览器处理时校验intefrity属性是否一致

cookiesession
状态浏览器端服务器端
存储以文本方式保存字符串类型支持任何类型的对象
大小单个cookie不能超过4kb无限制
安全性cookie欺骗,截获更高,存在加密的sessionID校验,存在cookie中
应用判断是否登录,存token保存登录信息,userid等

sessionStoragelocalStorage
生命周期临时保存,关闭窗口即消失永久保存
大小5M5M
位置客户端客户端
类型字符串字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值