02:数据类型转换 && 隐式转换 || 显式转换

在上一个章节中,我们介绍了 JavaScript 的基本的数据类型,由于是弱类型语言,所以不需要 在很多时候去定义这个数据的类型,而且也不能够在定义了这个数据类型之后再去改变这个数据类型。

当遇到一个需要对数据类型进行改变的场景的时候,JS 就显示出来它的优势了,可以对数据类型进行轻松的转换,那么下面 我们就开始介绍 如何轻松的对数据类型进行转换,以及在转换的过程中,我们需要非常注意点问题。

一、从 数字类型 转换成 字符串类型

A、 显式转换

const numberA = 123
console.log(typeof numberA) // number String(numberA) // "123"
numberA.toString() // "123"
B、 隐式转换
const numberB = 456
console.log(typeof numberA) // number const stringB = numberB + '' // "456"

TIPS: 特殊数值的隐士转换


const aNumber = NaN
const bNumber = Infinity
const cNumber = -Infinity
console.log(typeof aNumber) // number
console.log(typeof bNumber) // number
console.log(typeof cNumber) // number const aString = aNumber + '' // "NaN"
const bString = bNumber + '' // "Infinity"
const cString = cNumber + '' // "-Infinity" console.log(typeof aString) // string
console.log(typeof bString) // string
console.log(typeof aString) // string

二、从 字符串类型 转换成 数字类型

A、 显式转换

const aString = "789"
const bString = "789xxx"
const cString = "xxx789" // Number()
let aNumber1 = Number(aString) // 789
let aNumber2 = Number(bString) // NaN
let aNumber3 = Number(cString) // NaN // parseInt()
let bNumber1 = parseInt(aString) // 789
let bNumber2 = parseInt(bString) // 789
let bNumber3 = parseInt(cString) // NaN /* 是不是很困惑,为什么 bNumber2 和 bNumber3 的返回值是不一样的?*/
/* 那么我们顺手查了一下 手册 parseInt() 方法 */ /* tips: 如果传入的 string 开头为 1~9 的数字 或者 '0x'、('0X') */
/* 那么 parseInt 会返回对应的 整数部分的 数值,从而忽略掉数值后面跟随的 字符串 */
/* 至于 '0x' 则是因为 16 进制的原因。 同理 10进制 */ // parseFloat()
let cNumber1 = parseFloat(aString) // 789
let cNumber2 = parseFloat(bString) // 789
let cNumber3 = parseFloat(cString) // NaN // 看来 parseFloat 和 parseInt 情况是一样的。
B、 隐式转换

const aString = "789"
const bString = "789xxx"
const cString = "xxx789" let dNumber1 = + aString // 789
let dNumber2 = + bString // NaN
let dNumber3 = + cString // NaN // tips: 慎用 '789' + 0 || 0 + '789' let x = '789' + 0 // '7890'
let y = '789' - 0 // 789 // 不要问为什么~ 就是这么 6
隐式转换 中 不常见类型的转换结果

let aBool = + false // 0
let bBool = + true // 1 let aNaN = + NaN // NaN
let aNull = + null // 0
let aUndefind = + undefined // NaN let obj = {} let aObj = + {} // NaN // 引用对象类型在被 隐式转换 过后往往都是 NaN

以上则为 这个章节的内容, 欢迎 star, 地址 >>> 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换

《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换的更多相关文章

  1. Scala入门系列(十二):隐式转换

    引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...

  2. oracle数据类型及其隐式转换

    oracle有三种最基本的数据类型,即字符型.数值型.日期型. oracle提供的单行函数中,针对不同的数据类型,提供大量实用的函数,同时提供一系列数据类型转换函数,如下: 1)to_char     ...

  3. DB性能-隐式转换

    1        什么是隐式转换 当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换.当然, 有些情况下有些类型是不可以发生转换的,比如说从DATE类型转换到N ...

  4. 显示转换explicit和隐式转换implicit

    用户自定义的显示转换和隐式转换 显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码. 隐式转换implicit关键字告诉编译器只有当源代码中指定了显 ...

  5. C# 数据类型转换 显式转型、隐式转型、强制转型

    C# 的类型转换有 显式转型 和 隐式转型 两种方式. 显式转型:有可能引发异常.精确度丢失及其他问题的转换方式.需要使用手段进行转换操作. 隐式转型:不会改变原有数据精确度.引发异常,不会发生任何问 ...

  6. ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换

    js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...

  7. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  8. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  9. C#中的类型转换-自定义隐式转换和显式转换

    目录 前言 基础知识 示例代码 实际应用 问题 答案 报错 用户定义的转换必须是转换成封闭类型,或者从封闭类型转换 参考 其他 应用和设计 读音 参考 前言 有时我们会遇到这么一种情况:在json数据 ...

随机推荐

  1. python中 __cmp__

    对 int.str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法__cmp_ ...

  2. Django+Bootstrap+Mysql 搭建个人博客 (六)

    6.1.comments插件 (1)安装 pip install django-contrib-comments (02)settings INSTALLED_APPS = [ 'django.con ...

  3. 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”

    打开win7系统自带截图工具,显示"截图工具当前未在计算机上运行.请重新启动计算机,然后重试",  解决方法  1.首先在C盘中搜索tpcps.dll: 2.将数据最大那个tpcp ...

  4. BZOJ_4804_欧拉心算_欧拉函数

    BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...

  5. BZOJ_1179_[Apio2009]Atm_tarjan+spfa

    BZOJ_1179_[Apio2009]Atm_tarjan+spfa 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1179 分析: 显然有环 ...

  6. SQL数据库的一些操作

    --以 MySQL为例 //登陆 mysql -u root -p //创建一个名为test_lib的数据库 CREATE DATABASE test_lib //删除一个名为test_lib的数据库 ...

  7. android使用.9图作为背景,内容不能居中的问题解决方案

    在xml中使用.9图作为背景,内容不能居中,试了好多方法最后,加一个属性就ok了. android:padding:0dip; 解析:.9图作为背景时,不可拉伸的部分就相当于该空间的padding距离 ...

  8. Java的多态浅谈

    概述 Java的四大基本特性:抽象,封装,继承和多态.其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现.如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的引用变量所指向具 ...

  9. 【Java】几道常见的秋招面试题

    前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0.final关键字 简要说一下final关键字,final可以用来修饰什么? 这题我是 ...

  10. c#根据路径(url)下载图片

    方法一:根据路径下载图片 1 /// <summary> /// 图片另存为 /// </summary> /// <param name="url" ...