• 前端面试常见错误


    因为连接符的优先级高于三元运算符,所以 'Value is ' + true ? 'Something' : 'Nothing',返回的结果应该是Something。

    如果我们想先进行三目运算,需要用圆括号把它括起来:'Value is ' + (val === 'smtg' ? 'Something' : 'Nothing'),这时候返回的结果就是:Value is Something。

    var i=100
    i++;
    var j=i++;
    var y=++j;
    console.log(y,i,j)

    这道题考的是一元运算符++前置和后置时的执行顺序,简单来说,后置的++,先使用,再自加;前置的++,先自加,再使用

    题目中执行var j=i++;时,i++已经执行过一次,所以 i=101, j=101,执行完毕后再执行 i++,此时 i=102。

    执行var y=++j;时,先进行++运算,此时 j=102,赋值给 y,因此这道题的答案为:102,102,102。

     (function(){ var x = y = 1; })(); 
    console.log(y);
    console.log(x);

    答案: 1, error

    解析:这道题目涉及到变量提升的范围,以及赋值语法

    var x=y=1 等价于 var x=1; y=1; 这里的y会被提升至全局域。

    var x=1,y=1 等价于var x=1; var y=1, 这样写的话,x,y都是局部变量,不会被提升

    javascript中,'5'+3和'5'-3的结果是?

    答案:53  2
    解析:javascript 中, '5' + 3 的运算结果为 53, 当执行加法运算时,因为第一个操作数'5'为字符串形式,所以优先采用字符串连接。
    而 '5' - 3 的运算结果为 2,因为减法运算时,会尝试将操作数转换为 Number,再进行运算。所以 等同于 5 - 3,结果为 2。
    同理,3 + 3 + '5',计算结果应为 '65' (string), 从左到右计算,3 + 3,因为两个操作数都是 number,所以直接加法,结果为6,再计算 6 + '5',因为有一个操作数是 string,所以按字符串连接,结果就是 '65'。(以示区别,将字符串类型的用单引号括起来方便识别)

    var a = {}
    b = Object.prototype
    res = [a.prototype === b, Object.getPrototypeOf(a) === b]

    console.log(res)

    答案:  [false, true]

    解析:getPrototypeOf是ES5中实例获取原型的标准方法,而__proto__则是非标准方法。

    • C.prototype用于建立由 new C() 创建的对象的原型。
    • Object.getPrototype(obj)是ES5中用来获取obj对象的原型对象的标准方法。
    • obj.__proto__是获取obj对象的原型对象的非标准方法。

    Object.getPrototypeOf(u) === User.prototype; // true
    u.__proto__ === User.prototype; // true
     

    所以一般我们是不会直接访问C.prototype去获取原型对象的,在ES5的环境中,我们使用Object.getPrototype(obj)来获取原型对象,而在不支持ES5的环境中,我们可以考虑用__proto__这样的非标准方法来当做权宜之计

    以上内容转载自:1. 理解prototype、getPrototypeOf和_proto_之间的不同_Salmos Hu的博客-CSDN博客

    for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、 Generator 对象,以及字符串。

    对象类型不能直接使用for...of

    DOM0级
    1 使用赋值方式绑定事件;
    2 只能在冒泡阶段触发;
    3 只能绑定一个事件函数;
    4 通过置空onclick属性解绑事件;
    5 事件函数this属性引用当前函数对象。

    DOM2级
    1 非IE方式
    1.1 使用addEventListeren绑定事件;
    1.2 事件名无on前缀;
    1.3 使用addEventListeren第三个参数控制事件触发阶段;
    1.4 可绑定多个事件函数;
    1.5 多个事件函数的书法顺序和绑定顺序一样;
    1.6 事件函数this属性引用当前函数对象;

    2 IE方式
    和非IE不同的是以下几点:
    2.1 事件名带on前缀;
    2.2 事件函数this属性引用全局对象;
    2.3 多个事件函数的书法顺序和绑定顺序相反;


    以上内容转载自:https://www.jianshu.com/p/b850978c2ee8

  • 相关阅读:
    [附源码]Python计算机毕业设计Django汽车租赁管理系统
    ROS2/ROS1开发过程中的一些记录
    JdbcTemplate_java培训
    app小程序手机端Python爬虫实战09通过U2实现移动设备九宫格解锁
    C++面试经典100问
    Spring Cloud Gateway从数据库读取并更新Cors配置
    Vue echarts 饼图 引导线加小圆点,文字分行展示
    【算法】二分查找-20231121
    deepin 开启22端口
    前端开发工具vscode
  • 原文地址:https://blog.csdn.net/qq_38290251/article/details/125554517