《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换
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, 地址 >>> 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换
《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换的更多相关文章
- Scala入门系列(十二):隐式转换
引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...
- oracle数据类型及其隐式转换
oracle有三种最基本的数据类型,即字符型.数值型.日期型. oracle提供的单行函数中,针对不同的数据类型,提供大量实用的函数,同时提供一系列数据类型转换函数,如下: 1)to_char ...
- DB性能-隐式转换
1 什么是隐式转换 当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换.当然, 有些情况下有些类型是不可以发生转换的,比如说从DATE类型转换到N ...
- 显示转换explicit和隐式转换implicit
用户自定义的显示转换和隐式转换 显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码. 隐式转换implicit关键字告诉编译器只有当源代码中指定了显 ...
- C# 数据类型转换 显式转型、隐式转型、强制转型
C# 的类型转换有 显式转型 和 隐式转型 两种方式. 显式转型:有可能引发异常.精确度丢失及其他问题的转换方式.需要使用手段进行转换操作. 隐式转型:不会改变原有数据精确度.引发异常,不会发生任何问 ...
- ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换
js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- C#中的类型转换-自定义隐式转换和显式转换
目录 前言 基础知识 示例代码 实际应用 问题 答案 报错 用户定义的转换必须是转换成封闭类型,或者从封闭类型转换 参考 其他 应用和设计 读音 参考 前言 有时我们会遇到这么一种情况:在json数据 ...
随机推荐
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构
开启正文之前,先说一下源码剖析这一系列,就以“死磕到底”的精神贯彻始终,JDK-->JRE-->JVM(以openJDK代替) 最近想看看JDK8源码,但JDK中JVM(安装在本地C:\P ...
- 深入css布局篇(3)完结 — margin问题与格式化上下文
深入css布局(3) - margin问题与格式化上下文 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下 ...
- Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证
入职新公司第二周,接到了一个E2E测试的任务,两天的时间把所有的测试条件都写完了,结果剩下三天都卡在了Windows Authorization验证这里. 先说一下公司项目Authorize的逻辑 第 ...
- python的 a,b=b,a+b 和 a=b b=a+b 的区别(经典)
刚刚我在学习python的时候,发现下面的这个赋值要把给绕晕了(思考了很久),所以我整理之后写下博文, 希望对未来的学弟学妹有帮助! 永远爱你们的! ----新宝宝 n,a,b=0,0,1 while ...
- hydra暴力破解ssh服务器密码
概述 我都没想到,第一次暴力破解服务器密码.竟然是对自己的单位服务器出手..囧,因为还没来得及找测试部要来服务器登录密码,测试部负责人已经下班走了.后来又联系不上,这要更新代码,怎么办..于是就对测试 ...
- object类和内部类
1.Object object类是所有类的根类(父类). 如果一个类没有显示继承另外一个类,那么该类一定继承于object类. toString()返回对象字符串的的形式. public class ...
- Linux - 修改Cent OS系统的的hostname、配置DNS映射
目录 1 修改方式 2 扩展: 配置DNS映射 本篇文章中, 示例设计到的操作系统是CentOS 6.5. 1 修改方式 ① 命令hostname onepiece -- 运行后设置立即生效, 但要在 ...
- 前端ArcGIS学习之路-引言
本系列主要关注ArcGIS Server以及ArcGIS API for Javascript,由于我本人是从前端方面向GIS方面学习,希望能够给更多需要了解GIS的程序员同学更多的参考.另外本系列会 ...
- Unity 捏脸整理及基于骨骼的捏脸功能实现
目前实现捏脸功能的方式主要有两种.一个是Blendshape(融合变形),一个是基于骨骼驱动的方式,通过修改骨骼矩阵(bindpose)来影响SkinMesh.这两种方式的最终原理都是在shader ...
- 关于ef+codefirst+mysql/dapper(dbFirse)(入门)
ef+mssql详细是许多.net程序员的标配.作为一个程序员当然不能只会mssql这一个数据库,今天简单聊聊ef+mysql.推荐新人阅读. 1]首先创建一个mvc项目,如图: 创建完毕之后再nug ...