JS-每周3道面试题(第8周)

145 阅读2分钟
  1. 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?
    var a = 1
    
    console.log(window.a) // 1
    
    let aa = 123
    const bb = 456
    console.log(window.aa)   // undefined    
    console.log(window.bb)   // undefined

b和c到底在哪里呢?

由图可见,用 let 和 const 声明的全局变量并没有在全局对象中,只是一个块级作用域(Script)中, 获取方式就是在定义的块级作用域中直接获取

  1. cookie 和 token 都存放在 header 中,为什么不会劫持 token?

    1. 首先token不是防止XSS的,而是为了防止CSRF的;
    2. CSRF攻击的原因是浏览器会自动带上cookie,而浏览器不会自动带上token

    (CSRF中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。)

    cookie 举例:服务员看你的身份证,给你一个编号,以后,进行任何操作,都出示编号后服务员去看查你是谁。

    token 举例:直接给服务员看自己身份证

  2. 下面代码中 a 在什么情况下会打印 1?

var a = ?;
if(a == 1 && a == 2 && a == 3){
 	conso.log(1);
}

这到题主要考的是 == 的隐式转换

var a = {
    i: 1,
    toString() {
        return a.i++
    }
}

打印结果确实如此。

今天是台风天,外面风大雨大,窝在家里吃吃零食,打打游戏,看看书,巴适