【前端技术笔试排坑一】“符号间”的加法运算

news/2024/7/19 13:36:46 标签: javascript, js, 面试, 前端

目录

    • 前言
    • 正文内容
    • 总结

前言

这个东西来源在于本人开学推迟了之后呢,寻思着在家刚好可以去找个地方实习,因为刚刚结束大二,看了下相关岗位需求,因为计网还没学…只能去勉强试试前端开发,嗯然后投简历,hr筛选,被pass,简历,hr筛选,被pass…

终于,有一家 hr 发来了线上测试通知!!!!,但是这毕竟是第一次找实习,稀里糊涂脑子一热凭借着脑子里知识的残留就直接开始线上考试,复习这事情直接抛到了脑后。

主要考的方位有 JavaScript,html,数据结构,计算机网络,前端规范,ajax,vue 差不多这些,还有几个想不起来了,题目整体不是很难(毕竟我家乡的互联网大厂少之又少,可以忽略不计),但是坑多

然后,就遇到了这个…题目
嗯?!这什么玩意,感叹号加方括号????是我才疏学浅了…
虽然凭借着欧气选对了,但是为了防止再遇到依然不会,于是单独拿出来学习一下这玩意!!

正文内容

直接打开 webstorm 开始实践

javascript">    console.log([]);
    console.log([].length);

    console.log({});
    console.log({}.length);

    console.log(([] + {}))
    console.log(([] + {}).length)

题目

回忆一下 JavaScript 里 + 的机制,首先是判断是否 Number 型,其次如果其中有一个 string 型,那么另一个变量也会被转型成 string ,如果操作数为对象或者是数组这种复杂的数据类型,那么就将两个操作数都转换为字符串,进行拼接。

从上面控制台打印的结果不难看出 [] 就是个空数组,长度为 0,而 {} 似乎是一个空的 Object 对象 ,对象是没有 length 的。二者相加之后,却变成了 [object Object]。一个 Array 类型,一个 Object 类型,都是复杂数据类型,相加的规则应该是都转成 String 类型之后拼接,那就好理解了

  • [ ] 在运算中其实就相当于 ’ ’ ,就是一个空的字符串
  • { } 在运算中其实就相当于 [object Object] ,就是一个字符串

所以这俩加起来长度会是 15


接下来再来一组例子

javascript">    console.log(!+[])
    console.log((!+[]).length)

    console.log(!+{})
    console.log((!+{}).length)

    console.log(!+[] + {})
    console.log((!+[] + {}).length)

结果
这里稍微补充一些 !的知识

  • ! 逻辑非,将操作数的布尔值求反
    ! null —> true (等同于 Boolean ( null ) —> false ,加上非,结果取反)
    ! undefined —>true, ! 1 —> false, ! [] —> false
  • !! 类型转换,将对应的类型转换为Boolean型
    !! null —> false (等同于 Boolean ( null ) —> false )
    !! unsefined —> false, !! 1 ==> true, !! [] —> true

从其他大佬那里拿过来一个图,可以对比看看
在这里插入图片描述

了解了这些之后,我们再回来看这个

javascript">    console.log(!+[])
    console.log((!+[]).length)

! + []按照规则,先整体转化成 String 然后拼接成 !'', 然后就相当于! Boolean ([]),结果就变成了 true,一个布尔值自然是没有 length 属性的,所以 undefined。

再来看第二个

javascript">    console.log(!+{})
    console.log((!+{}).length)

! + {}按照规则,先整体转化成 String 然后拼接成 !{},然后就相当于! Boolean ({}),,结果为 true,同样没有 length 属性的,所以 undefined。

然后看第三个

javascript">    console.log(!+ [] + {})
    console.log((!+ [] + {}).length)
  • JavaScript 的 + 运算是从左往右 的!!,顺序不同结果不一样
    首先! + [] + {}中的! + []相加变成 true,然后 true + {} 结果变成了true[object Object],所以 length 为 19

变个顺序再看看

javascript">    console.log(! + {} + [])
    console.log((! + {} + []).length)

首先! + {} + []中的! + {}相加变成 true,然后 true + [] 结果变成了true,所以 length 为 4


最后,再来解决一下这道面试

javascript">console.log((!+[] + [] + ![]).length)

!+[] + [] + ![] 中首先!+[]结果为 truetrue + [] 的结果依然是 truetrue + ![]就相当于true + ! Boolean( [] ),结果就是truefalse,所以length 就是 9


多说一句:JavaScript中的减法就不会这么金贵,减法会把参与计算的数字全部化为 Number 进行运算,只要无法转换,就会 NAN

javascript">    console.log(false -1)
    console.log(true -1)
    console.log(true -"a")

结果

总结

平时感觉会的东西稍加改造自己就蒙了,所以通过这些面试题可以更快的提高自己。


http://www.niftyadmin.cn/n/644320.html

相关文章

MySQL里的wait_timeout

MySQL里的wait_timeout 如果你没有修改过MySQL的配置,缺省情况下,wait_timeout的初始值是28800。 wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小&…

ca30a_demo_C++_指针和const限定符_特殊的指针E0349

/*30_C_指针和const限定符txwtech 特殊的指针 1.指向const常对象的指针 2.const指针,一旦指向一个对象,就不可以修改,不能指向其它的 3.指向const对象的const指针,//定义时必须初始化。数据不可以修改。 指针和typedef 理解复杂的…

Linux 平台PostGIS安装

1.前提条件: postgresql 9.6.1 已经通过源码方式安装完成并可成功运行。 2. other OS packets OS: CentOS 6.4 X64 X64: libxml2-devel 3.geos-3.6.0 http://download.osgeo.org/geos/geos-3.6.0.tar.bz2 # tar xjvf geos-3.6.0.tar.bz2 ./configure ...... ......…

【深入JavaScript日记十二】剖析继承的多种方式

目录前言正文内容原型链继承构造函数继承组合继承[常用]原型式继承寄生式继承寄生组合式继承[最高效]总结前言 在之前的学习中总能看到继承这个词,今天就拿出来单独学习一下 正文内容 原型链继承 //父类function Parent() {this.name 小A同学;this.age 18;}//子…

ca31a_demo_31_C++_C风格字符串c_strcpy_strcmp_strcat

/* ca31a_demo_31_C_C_txwtech风格字符串c_strcpy_strcmp_strcat C风格字符串的使用 const char *cp"some value"; 字符常量数组 C风格字符串的标准函数 永远不要忘记字符串结束符null--\0 使用strn函数处理C风格字符串 尽可能使用标准库类型string cout << &…

【深入JavaScript_笔记一_防抖与节流】

目录前言正文内容防抖非立即执行方式立即执行方式节流时间戳节流定时器节流防抖和节流的区别总结前言 在前段日子&#xff0c;在内心的逼迫下跟着众多大佬的脚步&#xff0c;磨磨蹭蹭慢慢悠悠的学完了一些原生JavaScript底层的知识。产生了很多感触&#xff0c;编程技术太多了…

最近的学习---一句话收获(备查用)(2)

1.在内核中分配大内存问题。 首先要明白内核没有义务为你分配连续的物理内存&#xff0c;因此你需要的内核中连续的物理内存就是苛刻的要求&#xff0c;既然在计算机系统抽象给用户一个连续的美丽的一维的虚拟内存&#xff0c;那么任何时候计算机都没有义务让你看到物理内存&am…

【懒狗福音】平板 to 扩展屏 有效提高生产力

目录前言正文下载软件运行软件实际操作总结前言 为了下学期自己可以提高一些效率&#xff0c;最进入了个华为的平板&#xff0c;matepad10.8&#xff0c;打算进入一波无纸化学习。&#xff08;主要是懒&#xff0c;不想整天背着专业书和电脑跑这跑那&#xff09;&#xff0c;东…