广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中类型的强制转换与隐式转换详解
  • 521
分享到

JavaScript中类型的强制转换与隐式转换详解

2024-04-02 19:04:59 521人浏览 泡泡鱼
摘要

目录一、隐式转换双等号里的转换 Boolean 类型转换 "+" 与 "-" 二、强制类型转换 new String 与 ' ' 总结一、隐式转换 以下语句的执行结果是什么? A

一、隐式转换

以下语句的执行结果是什么?


A. undefined == null
B. isNaN("100")
C. parseInt("1a") === 1
D. [ ] instanceof Array

答案:

A. undefined == null 为 true; undefined === null 为 false

B. 当传入 NaN 或能被转换成 NaN 的值,isNaN 返回 true,"100"会被先转成 Number–>100,不为 NaN,因此返回 false

C. parseInt("1a")只会解析前面是数字的部分,即只解析"1",parseInt("1a1”) === 1 也为 true

D. [ ]是个空数组,返回 true

双等号里的转换

热身完毕再来看一段代码:


if ([]) {
  console.log(true);
}

结果输出了 true。

其实 [] 为 false,因为在等号比较时,如果有一边是 Boolean 值,会优先将左右两边的数据转为 Number,
即:


Number([]); // 0
Number(false); // 0

因此[] 为 false。

但是,但是,进行 if 判断时,会将数据转为 Boolean 类型,

即:


Boolean([]); // true

所以可以输出 true。

总结一些双等号判断时的技巧:

  1. 如果双等号前后有 NaN,一律返回 false;
  2. 如果双等号前后有布尔值(0,1 也算),一律转成数字再比较,(false 为 0,true 为 1);
  3. 如果双等号前后有字符串,分为三种情况:
    1. 另一端是对象,则对象使用 toString 或者 ValueOf 进行转换;
    2. 另一端是数字,字符串转数字;
    3. 另一端是字符串,直接比较;
    4. 其他一律返回 false。
  4. 如果一端是数字,另一端是字符串如 '3'则参考第三条。另一端是对象,取对象的 toString 或 ValueOf 结果进行比较,其他一律返回 false;
  5. null 和 undefined 不进行类型转换,但是它们俩相等;

Boolean 类型转换


var test = new Boolean();
console.log(test);

var test = new Boolean(0);
console.log(test.valueOf());

var test = new Boolean(null);
console.log(test.valueOf());

var test = new Boolean("");
console.log(test.valueOf());

var test = new Boolean(NaN);
console.log(test.valueOf());

答案为:

false false false false false

原理如下:

  1. 当作为一个构造函数(带有运算符 new)调用时,Boolean() 将把它的参数转换成一个布尔值,并且返回一个包含该值的 Boolean 对象,注意这里返回的是 Boolean 对象,可以通过 toString 或者 valueOf 取值;
  2. 如果作为一个函数(不带有运算符 new)调用时,Boolean() 只将把它的参数转换成一个原始的布尔值,并且返回这个值——强制类型转换;
  3. 如果省略 value 参数,或者设置为 0、-0、null、""、false、undefined 或 NaN,则该对象设置为 false。否则设置为 true(即使 value 参数是字符串 "false”)。

"+" 与 "-"


console.log(1 + "2" + "2");
console.log(1 + +"2" + "2");
console.log("A" - "B" + "2");
console.log("A" - "B" + 2);

输出结果如何?

结果为:122 32 NaN2 NaN

解析:

  1. 数字和字符串相加,会将数字转为字符串,所以结果是字符串拼接,第一句输出"122";
  2. +"2”,这里的一元运算符+,会将字符串转为数字,于是 1+ +"2” = 1+2 = 3,再与后面的字符串合并,所以第二句输出”32";
  3. 减号会将减号两边都先转化成数字,而 Number("A”)、Number("B”)结果是 NaN,减法操作中,只要有一方为 NaN,结果都是 NaN,因此第三句是 NaN 和"2"的拼接,结果为 NaN2(第 4.1 点中提到,双等号其中一方为 NaN,结果为 false);
  4. 根据前一句的解析,"A”-"B"结果为 NaN,与数字 2 相加,结果还是 NaN

二、强制类型转换

对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?


A. parseInt( a );
B. Math.floor( a );
C. Math.ceil( a );
D. a.split('.')[0];

答案:AB

很多人看一眼就会选择ABC

解析:

A. parseInt 转换为整数,默认为 10 进制,结果为 10;

B. floor 向下取整,结果为 10 —— floor 是地板的意思,向下取整,辅助记忆;

C. ceil 向上取整,结果为 11;

D. split 操作数必须是正则或字符串,结果为 TypeError。

new String 与 ' '

下面哪些执行结果为 true?


A. 'foo' == new function(){ return String('foo'); };
B. 'foo' == new function(){ return new String('foo'); };
C. [] == 0
D. ![]
E: !0

答案:

A:下面细说;

B:下面细说;
C:Number([])结果是 0,因此 C 选项正确;
D:对象总等于真,但是为什么在判断一个空对象 == true 或者 === true 得到的结果都是 false 呢?

根据我们在双等号那里的总结可知,双等号有一方为布尔值时,两边都会转换为 Number 类型,所以控制台测试空对象== true 或者 === true,实际上都是在执行 空对象==1 或者 === 1,所以才会返回 false,因此,如果你想验证对象总等于真,应该使用!{} 和 !!{}  !{}; // false;   !!{}; // true

E:由于 Boolean(0) == false,因此!0=true,正确。

说说 AB 选项,由于使用 new 关键字,调用 function 构造函数,结果变得出乎我们的意料。

首先我们要知道,当使用 new 调用一个构造函数时,如果内部返回了一个引用对象(数组,对象,函数等)都将覆盖 new 创建的匿名对象。

如果返回一个原始类型(无显式 return 时,其实是返回了一个 undefined),那么就返回了 new 创建的匿名对象。

如此看来,

A 选项中,构造函数内返回的是一个字符串,那么最终构造函数返回的是 new 创建的匿名对象,也就是一个空对象。

B 选项中,构造函数内部返回的是一个字符串对象,那么最终构造函数返回的是这个对象。

总结

到此这篇关于javascript中类型的强制转换与隐式转换的文章就介绍到这了,更多相关JavaScript类型强制转换与隐式转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript中类型的强制转换与隐式转换详解

本文链接: https://www.lsjlt.com/news/134043.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中类型的强制转换与隐式转换详解
    目录一、隐式转换双等号里的转换 Boolean 类型转换 "+" 与 "-" 二、强制类型转换 new String 与 ' ' 总结一、隐式转换 以下语句的执行结果是什么? A...
    99+
    2022-11-12
  • c++类的隐式转换与强制转换重载详解
    在写这篇文章之前,让我们先回顾一下编译器通过匹配过程确定调用哪一个函数的匹配顺序:(1)寻找和使用最符合函数名和参数类型(包括返回值)的函数,若找到则调用;(2)否则,寻找一个函数模...
    99+
    2022-11-15
    隐式转换 强制转换 c++
  • C语言基础隐式类型转换与强制类型转换示例解析
    目录类型转换隐式类型转换强制类型转换类型转换 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换包括隐式类型转换和强制类型转换。 类型转换的原则:占用内...
    99+
    2022-11-12
  • C语言隐式类型转换与强制类型转换的方法是什么
    本篇内容主要讲解“C语言隐式类型转换与强制类型转换的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言隐式类型转换与强制类型转换的方法是什么”吧!类型转换数据有不同的类型,不同类型数...
    99+
    2023-06-25
  • C#数据类型转换(显式转型、隐式转型、强制转型)
    C# 的类型转换有显式转型 和 隐式转型 两种方式。 显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。隐式转型:不会改变原有数据精确度、引发异常,...
    99+
    2022-11-12
  • JavaScript隐式类型转换规则详解
    目录前言数学运算符中的类型转换减、乘、除加逻辑语句中的类型转换单个变量使用 == 比较ToPrimitive前言 在 JavaScript 中,在进行运算操作时,如果两边数据不统一,...
    99+
    2023-05-18
    JavaScript 隐式类型转换 JavaScript 类型转换规则
  • C++ 强制类型转换详解
    目录一、C强制转换二、C++强制转换1、static_cast 静态转换(编译时检查)2、const_cast 常量转换3、reinterpret_cast 重新解释转换4、dyna...
    99+
    2022-11-12
  • java如何实现类型转换与强制类型转换
    这篇文章主要介绍了java如何实现类型转换与强制类型转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java类型转换与强制类型转换如果你以前有编程经验,那么你已经知道把一种...
    99+
    2023-06-03
  • 浅析JavaScript中的隐式类型转换
    目录为什么会出现隐式类型转换隐式类型转换的内部转换机制何时会触发ToPrimitive或ToNumber具体案例分析总结为什么会出现隐式类型转换 这个问题的本质原因是因为JavaSc...
    99+
    2023-03-08
    JavaScript隐式类型转换 JavaScript隐式类型
  • JavaScript中的隐式类型如何转换
    这篇文章主要介绍“JavaScript中的隐式类型如何转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的隐式类型如何转换”文章能帮助大家解决问题。为什么会出现隐式类型转换这个...
    99+
    2023-07-05
  • C++中的强制类型转换操作详解
    目录相关术语C语言中的强制类型转换C++中的强制类型转换static_castdynamic_castreinterpret_castconst_cast注意事项相关术语 强制类型转...
    99+
    2023-05-17
    C++强制类型转换 C++类型转换
  • Javascript类型转换详解
    目录类型转换1.String->Number2.Number->String3.混合String->Number4.String->Array5.Array-...
    99+
    2022-11-12
  • golang类型推断与隐式类型转换
    目录前言一、常量的隐式类型转换1.常量的声明2.常量的类型转换3.隐式转换的原理二、变量的类型推断1.类型推断的原理三、类型推断示例分析总结前言 golang类型推断可以省略类型,像...
    99+
    2022-11-13
  • python中的强制类型转换
    python内提供了几种称为强制类型转换的函数,可以将一个变量的类型强制转换为另一种类型。比如,整型->浮点型,列表->元组。 我们在之前已经学习了很多种数据类型 · 整型 int · 浮点型 float · 字符串型 str · 列表li...
    99+
    2023-10-24
    python 开发语言 服务器 网络 数据库
  • C++超详细讲解强制类型转换
    目录1 C 强制类型转换2 C++ 强制类型转转1 C 强制类型转换 C 方式的强制类型转换的用法如下代码所示: (Type)(Expression) Type:需要转换成的类型Ex...
    99+
    2022-11-13
  • JavaScript运算符规则与隐式类型的转换
    本篇内容介绍了“JavaScript运算符规则与隐式类型的转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • C#强制类型转换与泛型怎么理解
    本篇内容主要讲解“C#强制类型转换与泛型怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#强制类型转换与泛型怎么理解”吧!C# 强制类型转换和普通对象一样,泛型类的对象也可以采用强制类型...
    99+
    2023-06-17
  • JavaScript隐式类型转换例子总结
    目录前言ToStringToNumberToBooleanToPrimitive运算符 +逻辑判断相关== 宽松对等规则1. 字符串和数字之间的相等比较2. 其他类型和布尔类型的相等...
    99+
    2022-11-13
    JavaScript隐式类型转换 JavaScript隐式类换
  • go类型转换及与C的类型转换方式
    GO类型转换及与C的类型转换 类型转换 语法 dst := float32(src) 示例 var num int = 520 f32 := float32(num) i6...
    99+
    2022-06-07
    GO
  • javascript进行强制类型转换的方法
    这篇文章给大家分享的是有关javascript进行强制类型转换的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。强制转换方法:1、使用ToString()、ToNumber()或ToBoolean()方法;2、...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作