面试之一


一、第一家:

1.vue中computer和fliter和watch,适用场景区别?

computer(计算属性):需要使用的属性不存在,要通过已有的属性计算得来,当依赖的属性发生变化时会重新调用。

computed用于处理复杂的逻辑运算,主要和methods储存方法来进行区分;methods储存方法,computed储存需要处理的数据值;methods每次都会调用,computed有缓存机制,只有改变时才执行,性能更佳;当页面中需要使用大量的表达式处理数据时使用

watch(监视属性):当被监视的属性发生变化的时候,回调函数自动调用,进行操作。(可使用deep属性开启深度检测)

用于监听数据变化,其中可以监听的数据来源有三部分:props、data、computed内的数据;watch提供两个参数(newValue,oldValue),第一个参数是新值,第二个参数保存旧值;数据变化时执行异步或开销较大的操作时,(但是watch只能对某一个数据进行监听,而computed的只要函数内部涉及到的变量发生改变,就都会重新进行计算.所以大开销推荐使用watch)

fliter(过滤):为我们提供的一个方法,用来帮助我们对数据进行筛选,可被用于一些常见的文本格式化。

(1)watch与computed的区别:

1.watch监控现有的属性,computed通过现有的属性计算出一个新的属性

2.watch不会缓存数据,每次打开页面都会重新加载一次,

但是computed如果之前进行过计算他会将计算的结果缓存,如果再次请求会从缓存中
得到数据(所以computed的性能比watch更好一些)

(2)compute和flite的区别:

计算属性    

依赖于一个固定的vue实例 ,在某一个实例中使用    

不接受额外参数,依赖于data属性中的变量

有缓存管理机制,可减少页面调用次数    

计算属性虽默认为只读,但可以定义为对象,开启可读可写模式  

 计算属性被作为一个类属性调用  

过滤器

不依赖于实例。可以 定义一个全局过滤器,在多个实例中使用

不要求是data中的变量,可以是临时变量。可接受额外参数。

无缓存机制,调用次数,取决于页面中有所多少过滤器

只能读取操作

过滤器被作为一个特殊方法处理
————————————————
版权声明:本文为CSDN博主「少油少盐不要辣」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40713392/article/details/86363955

2.事件冒泡阻止和事件执行阻止的函数

1. event.stopPropagation()方法

这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,

2. event.preventDefault()方法

这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;

3. return false  ;

这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

3.vue中事件修饰符

prevent:阻止默认事件

stop:阻止事件冒泡

once:事件只触发一次

capture:使用事件捕获模式(捕获阶段执行)

self:只有event.target是当前操作元素才会触发

passive:事件默认行为立即执行,无需等待事件回调执行完毕。

4.computer能接收参数吗?情景问题:根据一个数据的状态不同返回不同的字符串。

(例如a=0,会返回一,a=2会返回二)

vue中computed计算属性无法直接进行传,如果有传参数的需求比如说做数据筛选功能可以使用闭包函数(也叫匿名函数)实现

使用计算属性来判断,当a属性发生变化时直接返回对应的字符串,watch也可以,生命周期函数也行。

二、第二家:

1.foreach()和map()的区别:

forEach() :对数组的每个元素执行一次提供的函数。

map():它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。

forEach()map()方法通常用于遍历Array元素,forEach()方法不会返回执行结果,而是undefined。也就是说,forEach()会修改原来的数组。而map()方法会得到一个新的数组并返回。

   arr = [0, 1, 2, 3];
        let list = arr.map(value => {
            return value * value;
        });
        console.log(arr);
        console.log('新数组' + list);
        arr.forEach((value, key) => {
            return arr[key] = value * value;
        });
        console.log(arr);

//返回
    [0, 1, 2, 3]
      新数组0,1,4,9
    [0, 1, 4, 9]
arr = [0, 1, 2, 3];
        arr.forEach((value, key) => {
            return arr[key] = value * value;
        });
        console.log(arr);
        let list = arr.map(value => {
            return value * value;
        });
        console.log(arr);
        //返回
        [0, 1, 4, 9]
         [0, 1, 4, 9]

2.同源策略和跨域

同源策略

是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。

它能帮助阻隔恶意文档,减少可能被攻击的媒介。

所谓同源是指域名,协议,端口相同。

跨域资源共享(Cross Origin Resourse-Sharing)

受前面所讲的浏览器同源策略的影响,不是同源的脚本不能操作其他源下面的对象。想要操作另一个源下的对象是就需要跨域。

1.JSONP实现跨域请求

简单的说,就是动态创建