10道前端问题,你能回答几个

84 阅读2分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

  1. 字符串对象中的substring函数和slice函数的区别?
    相同点:
    (1)substring与slice都是用于字符串截取
    (2)都可以接受两个参数start和end,分别表示开始索引和结束索引位(不包含end位置)
    不同的是:
    (1)如果end<start
    substring会将start和end交换;
    而slice会直接返回空串,表示没截取到
    (2)如果start或者end有负数
    substring会把小于0的数,当成0来计算
    而slice允许是负数,表示倒数第几位开始或结束

  2. 下面代码的执行结果是什么?

Object.prototype.a = 1;
var obj = {
    b:2
}
for(var i in obj){
    console.log(obj[i])
}

答案:2 1
解析:for in循环中,会先变量obj自身属性的key,然后再去变量原型上的属性

  1. 下面代码的执行结果是什么?
var name = 'Alice';
var  obj = {
    name:'Tom',
    getName:function(){
        return function(){
            return this.name
        }
    }
}
console.log(obj.getName()())

答案:Alice
解析:谁调用this指向谁,obj.getName()执行时this指向obj,而执行完后返回一个function,这个function执行时没人调用,所以里面this指向window,最后输出window上的name

  1. 下面代码的执行结果是?
var obj = {
    val: 2,
    del: function () {
        this.val *= 2;
        console.log(val)
    }
}
obj.del()

答案:1
解析:我们知道执行obj.del()之后,obj.val变成了4,但是需要注意val找变量的时候,会沿着作用域查找,会找到外面被声明的的val,而非obj对象上的。

  1. 下面代码的执行结果是什么

**

var name = 'Alice';
(function(){
    if(name === 'undefined'){
        var name = 'Tom'
        console.log(name)
    }else{
        console.log(name)
    }
})()

答案:Tom
解析:立即函数执行时,由于if语句中有声明name,所以在预编译的时候会将name提升,并且值为undefined,所以打印Tom

  1. 下面代码的执行结果是什么

**

var name = 'Alice'
(function(){
    if(name === 'undefined'){
        var name = 'Tom'
        console.log(name)
    }else{
        console.log(name)
    }
})()

答案: Uncaught TypeError: "Alice" is not a function
解析:由于'alice'后面没有结束符号,下面跟着(),便以为是函数。导致结果报错

7。 什么是 WebSocket

WebSocket是 HTML5 中的协议,支持持久连续,http 协议不支持持久性连接。Http1.0HTTP1.1都不支持持久性的链接,HTTP1.1中的 keep-alive,将多个 http 请求合并为1