写在前边

这部分的面试知识点是和前几天发的那篇基础知识点是一起的,小鹿按照分类把它分成两篇进行分享。

动画:面试官问我 0.1 + 0.2 __ 0.3 ? 为什么?该如何正确回答?

暑假去面试,进门先做笔试题,笔试题的基础部分大多都是这样 JS 基础问题,做的时候总是含含糊糊,感觉对也感觉不对。其实回来总接到,还是这些基础点没有掌握牢靠,看了过一段时间就忘,有没有一种方法把这些零散知识理解记住呢?

试一下动画方式,看看有没有好的效果,进入今天的正题。

思维导图

1

转 Boolean 类型

任何的值如果转化为布尔类型时,我们只记住其中几个转化为false即可,因为如果转化为true一块记的话,较容易引起混乱。

只有null(小写的 n)、undefined、””(中间没有空格)、NAN、0、-0、false再进行类型转换时,可以转化为false。所有对象类型都会转化为true。

为了更好的准备面试,小鹿送你一套动画记忆法:


1、null与 unefined

它俩什么到底区别?初学者最容易弄不懂。

null 表示"没有对象",即该处不应该有值。undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义。

在细节上,null是一个表示"无"的对象,转为数值时为 0;undefined是一个表示"无"的原始值,转为数值时为NaN。


两者转化为boolean时,可以记忆为无,都会转化为false。

2、NaN与 ""

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。


注意:这里的空字符串没有空格,如果面试的时候加空格了,比如这样“ ”,它就返回 true 了。

3、+0 与 -0

如果此处有忽略,请给予补充!

2

对象转原始类型

对象类型转原始类型时,它会根据不同的转换对象调用不同的转化方法(回顾一下我们之前写的文章,对象类型和原始类型的区别)。

如果转化为字符串,就会调用toString方法;

如果转化非字符串,则会优先调用valueOf方法(返回自身类型)。


注意:toString 方法和 valueOf 方法是可以改写的。


2.1 对象类型转字符串

对象转字符串类型的话,直接调用原有的toString方法。


2.2 对象类型转原始类型

除 String 类型外,Object 转其他类型的话,直接调用valueOf方法。

如果调用valueOf返回的不是原始类型的值,会调用toString方法,toString如果返回的不是原始值,就会报错。

3

四则运算

3.1 加法运算

加法运算符是在运行时决定,到底是执行相加,还是执行连接。运算数的不同,导致了不同的语法行为,这种现象称为“重载”。

1、如果双方都不是字符串,则将转化为数字或字符串。


2、字符串和字符串以及字符串和非字符串相加都会进行连接。

3、对于无效格式,则会转化为NaN。

3.2 其他运算

其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。

4

逻辑运算符

5.1 条件判断

&&:所有条件为真,整体才为真。

||:只有一个条件为真,整体就为真。

5.2 赋值操作

1、A && B

首先看 A 的真假,A 为假,返回 A 的值,A 为真返回 B 的值。(不管B 是啥)


2、A || B

首先看 A 的真假,A 为真返回的是 A 的值,A 为假返回的是 B 的值(不管B 是啥)

5

类型判断

6.1 typeOf

typeOf一直有一个问题就是能够正确的判断类型吗?除了null都显示正确的类型,但是并不能准确的判断对象的具体类型。

对于为什么 typeOf null 判断为对象类型,上一篇文章已经分享过,可以看之前的一篇文章。


那我们用什么准确的判断呢?要想正确的判断一个对象类型是通过内部机制的原型链判断的,instanceOf能够正确的判断对象的原理是什么?这个问题不在这里说,因为后期会出一个用动画形式去讲解 JS 的原型和原型链,到时候初学者就更容易懂了。

6

== 和 === 有什么区别?

对于==和===之间的区别,使用==,如果比较的双方的数据类型不一样的话,就进行类型转换。如上所述,类型转换之后再进行对比。

7.1==的比较步骤

首先比较双方的类型是否相等,如果类型相同,就比较大小,否则将会以下面步骤进行,首先进行类型转换。

1、判断两者是否为null和undefined,是则返回 true。

2、判断两者类型是否分别为字符串和数字,是的话将字符串转化为number类型,然后比较大小。

3、如果两者其中一个是布尔类型,就把先把布尔类型转化为number再进行判断大小。

4、如果对象类型和原始类型比较,先把对象类型转化为原始类型再进行比较。

7.2 ===

对于===来说,只比较数值大小就可以了。

小结

以上我们对数据类型转换进行了全面的总结,尤其是其中的一些细节问题考的特别的细,所以小鹿以动画的形式展现出来,便于在面试的时候牢记使用,更重要的一点就是在实际开发中遇到这些问题不用到处翻找,从而使你快速的定位问题,节省开发时间。

上边的代码例子,都是小鹿亲自在控制台输出查得出的结果,但是也避免不了有错误的情况,如果有错误可以给小鹿提出来哦!

©著作权归作者所有:来自51CTO博客作者mb5fe1601ede528的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. python数据类型的强制转换
  2. PHP函数库之类与对象详解
  3. PHP 枚举类型的管理与设计
  4. 了解一下PHP面向对象的相关概念
  5. 浅谈PHP面向对象的继承
  6. PHP中的面向对象实践-基本实践案例
  7. PHP面向对象到底是啥?十分钟通俗易懂图文教程
  8. PHP中的面向对象之构造函数详解
  9. php面向对象之析构函数和对象引用

随机推荐

  1. Android EditText样式
  2. Android故障积累----(1/N)
  3. Android HandlerThread
  4. Android屏幕自适应详解
  5. 让应用程序不被任务管理器杀死...(获取系
  6. 2011.07.11(3)——— android xliff字符串
  7. android studio 中设置apk的版本号
  8. android 积累一些自定义view的知识
  9. 【Android】Android Studio启动配置gradl
  10. android 技术文章个人搜索集锦