目录

1.转换和等价Conversions and Equality

2.显式转换Explicit Conversions

1.通过函数

2.通过运算符

3.将数字转换为字符串number-to-string

1.不同基数的转换

2.控制位数和指数

4.将字符串转换为数字string-to-number


JavaScript 对所需的值类型非常灵活

  • 当 JavaScript 需要一个布尔值时,你可以提供任何类型的值,JavaScript 会根据需要对其进行转换。 一些值(“真”值)转换为真,而其他(“假”值)转换为假。
  • 如果 JavaScript 想要一个字符串,它会将你给它的任何值转换为字符串。 、
  • 如果 JavaScript 需要一个数字,它会尝试将您给它的值转换为一个数字(如果它无法执行有意义的转换,则转换为 NaN)。
10 + " objects" // => "10 objects": Number 10 converts to a string
"7" * "4" // => 28: both strings convert to numbers
let n = 1 - "x"; // n == NaN; string "x" can't convert to a number
n + " objects" // => "NaN objects": NaN converts to string "NaN"

JavaScript type conversions类型转换表https://www.notion.so/9b9c808520b242d0a1af3ce57253834e

注意:空格意味着不需要转换,红色加粗意味着要特别注意

可以解析为数字的字符串将转换为这些数字。允许使用前导和尾随空格,但是任何不属于数字字面量的前导或尾随非空格字符都会导致字符串到数字的转换产生NaN

1.转换和等价Conversions and Equality

JavaScript有两个操作符来测试两个值是否相等。

“严格相等操作符”===,如果操作数不是同一类型,则不认为其操作数相等,编码时几乎总是使用严格相等操作符。

由于JavaScript在类型转换方面非常灵活,它还定义了具有灵活相等定义的==操作符。

null == undefined // => true: These two values are treated as equal.
"0" == 0 // => true: String converts to a number before comparing. 字符串在比较之前转换为数字
0 == false // => true: Boolean converts to number before comparing. 布尔值在比较之前转换为数字
"0" == false // => true: Both operands convert to 0 before comparing! 两个操作数在比较之前都转换为 0

请记住,将一个值转换为另一个值并不意味着这两个值相等

例如,如果在需要布尔值的地方使用 undefined,它将转换为 false。 但这并不意味着 undefined == false。

JavaScript 运算符和语句需要各种类型的值并执行到这些类型的转换。

if 语句将 undefined 转换为 false,但 == 运算符从不尝试将其操作数转换为布尔值

2.显式转换Explicit Conversions

1.通过函数

执行显式类型转换的最简单方法是使用 Boolean()、Number() 和 String() 函数

Number("3") // => 3
String(false) // => "false": Or use false.toString()
Boolean([]) // => true

除 null 或 undefined 之外的任何值都有一个 toString() 方法,该方法的结果通常与 String() 函数返回的结果相同。

Boolean()、Number() 和 String() 函数也可以使用 new 作为构造函数constructor来调用。

如果您以这种方式使用它们,您将获得一个**“包装器”对象**“wrapper” object,其行为类似于原始布尔值、数字或字符串值。a primitive boolean, number, or string value

这些包装器对象是 JavaScript 早期的历史遗留物,而且从来没有任何好的理由使用它们。

2.通过运算符

某些 JavaScript 运算符执行隐式类型转换,有时会被用于显式类型转换。

如果 + 运算符的一个操作数是字符串,则它将另一个操作数转换为字符串。

一元 + 运算符将其操作数转换为数字。

一元! 运算符将其操作数转换为布尔值并将其取反。

x + "" // => String(x)
+x // => Number(x)
x-0 // => Number(x)
!!x // => Boolean(x): Note double !
//**一些习惯用法**

3.将数字转换为字符串number-to-string

1.不同基数的转换

Number 类Number class定义的 toString() 方法接受一个可选参数,该参数指定转换的radix或base。

如果不具体指定,则转换以 10 为基数。但是,您也可以用其他基数(2 到 36 之间)转换数字。

let n = 17;
let binary = "0b" + n.toString(2); // binary == "0b10001"
let octal = "0o" + n.toString(8); // octal == "0o21"
let hex = "0x" + n.toString(16); // hex == "0x11"

2.控制位数和指数

处理财务或科学数据时,您可能希望将数字转换为字符串,以便控制输出中的小数位数decimal places或有效位数the number of significant digits,或者您可能希望控制是否使用指数表示法。

toFixed() 将数字转换为小数点后指定位数的字符串。它从不使用指数符号。

toExponential() 使用指数表示法将数字转换为字符串,小数点前有一位,小数点后有指定的位数(这意味着有效位数比您指定的值大一)。

toPrecision() 将数字转换为具有您指定的有效位数的字符串。如果有效数字的数量不足以显示数字的整个整数部分,则它使用指数表示法。

所有三种方法都将尾随数字四舍五入或酌情用零填充

let n = 123456.789;
n.toFixed(0) // => "123457"
n.toFixed(2) // => "123456.79"
n.toFixed(5) // => "123456.78900"
n.toExponential(1) // => "1.2e+5"
n.toExponential(3) // => "1.235e+5"
n.toPrecision(4) // => "1.235e+5"
n.toPrecision(7) // => "123456.8"
n.toPrecision(10) // => "123456.7890"

4.将字符串转换为数字string-to-number

如果将字符串传递给 Number() 转换函数,它会尝试将该字符串解析为整数或浮点字面量。

该函数仅适用于以 10 为基数整数,并且不允许不属于字面量一部分的尾随字符trailing characters that are not part of the literal。

parseInt() 和 parseFloat() 函数(它们是全局函数global functions,不是任何类的方法methods of any class)更加灵活。

parseInt() 只解析整数,而 parseFloat() 解析整数和浮点数

如果字符串以“0x”或“0X”开头,则 parseInt() 将其解释为十六进制数。

parseInt() 和 parseFloat() 都跳过前导空格,尽可能多地解析数字字符,并忽略后面的任何内容。

如果第一个非空格字符不是有效数字字面量的一部分,则返回 NaN

parseInt("3 blind mice") // => 3
parseFloat(" 3.14 meters") // => 3.14
parseInt("-12.34") // => -12
parseInt("0xFF") // => 255
parseInt("0xff") // => 255
parseInt("-0XFF") // => -255
parseFloat(".1") // => 0.1
parseInt("0.1") // => 0
parseInt(".1") // => NaN: integers can't start with "."
parseFloat("$72.47") // => NaN: numbers can't start with "$

parseInt() 接受可选的第二个参数,指定要解析的数字的基数(基数)。 合法值在 2 到 36 之间

parseInt("11", 2) // => 3: (1*2 + 1)
parseInt("ff", 16) // => 255: (15*16 + 15)
parseInt("zz", 36) // => 1295: (35*36 + 35)
parseInt("077", 8) // => 63: (7*8 + 7)
parseInt("077", 10) // => 77: (7*10 + 7)

犀牛书第七版学习笔记:数据类型与结构-类型转换相关推荐

  1. 犀牛书第七版学习笔记:数据类型与结构-字符串

    目录 0.字符串与16位值 1.字符串字面量 2.字符串字面量中的转义序列Escape Sequences in String Literals 3.处理字符串Working with Strings ...

  2. 犀牛书第七版学习笔记:数据类型与结构-数字

    JavaScript is a multi-paradigm, dynamic language多范式的动态语言 with types and operators类型和运算符, standard bu ...

  3. 犀牛书第七版学习笔记:数据类型与结构-布尔值

    目录 1.逻辑判断功能 2. 布尔值转换 1.将其他类型转为布尔值 2.将布尔值转化为其他类型 3.布尔值操作符boolean operators 布尔表示一个逻辑实体 Boolean represe ...

  4. 犀牛书第七版学习笔记:let、const和 var 声明与赋值

    目录 0.基本常识 0.1变量与常量 0.2 作用域scope 0.3 重复声明 1.var 1.1 var声明作用域 var Declaration Scope 函数作用域 全局var声明 1.2 ...

  5. 犀牛书第七版学习笔记:执行上下文与作用域

    目录 1.执行上下文 2.作用域链 3.作用域链增强Scope Chain Augmentation 4.变量声明 Variable Declaration 4.1使用 var 的函数作用域声明 Fu ...

  6. JavaScrpit 犀牛书第七版笔记

    JavaScrpit 犀牛书第七版笔记 挖个坑吧,JavaScript 犀牛书英文的第七版(JavaScript: The Definitive Guide, 7th Edition)其实在去年(20 ...

  7. dx12 龙书第七章学习笔记 -- 利用Direct3D绘制几何体(续)

    1.帧资源 之前,我们在处理CPU和GPU的同步问题时,采取以下方法:在每帧绘制的结尾调用D3DApp::FlushCommandQueue函数,以确保GPU在每一帧都能正确完成所有命令的执行 这样做 ...

  8. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  9. PMBOK(第六版) 学习笔记 ——《第七章 项目成本管理》

    系列文章目录 PMBOK(第六版) 学习笔记 --<第一章 引论> PMBOK(第六版) 学习笔记 --<第二章 项目运行环境> PMBOK(第六版) 学习笔记 --<第 ...

最新文章

  1. 【Linux】服务器常用的操作命令
  2. LVS学习笔记及总结(思维导图版)
  3. c标签 if else
  4. 最长重复子串(Rabin-Karp算法)
  5. c++的string转char*遇到的指针问题
  6. 脑电图伪差去除matlab,脑电图伪差的识别方法.ppt
  7. php str_replace 字符串替换
  8. GC算法-标记清除算法
  9. 自动化部署kvm虚拟机_自动化虚拟助手
  10. 提高 Linux 开发效率的 5 个工具
  11. 1.关于Python,你可能不知道的
  12. SQL获取当前日期函数
  13. java面试题:数组的常用算法实现
  14. YOLOv5 完美实现中文标签显示
  15. Rational Team Concert 的使用
  16. Google 101 Tips
  17. 热释电探测器多用在_热释电红外探测器
  18. 物联网全栈开发实战系列文章汇总(共865篇,持续更新-2023.05.02)
  19. 管理 POP3 和 IMAP4 服务
  20. linux查看光纤卡微码版本,各操作系统中查看HBA 光纤卡 WWN 号的方法汇总

热门文章

  1. python中repr()函数用法详解
  2. 《Android系统开发》笔记
  3. MATLAB 散点数据拟合曲线
  4. 在Fritzing中创建自定义元件(最终修改)
  5. 双一流大学最牛计算机专业,42所双一流大学2000-2018年国家三大奖统计,科研实力一目了然...
  6. golang的goproxy配置
  7. Font Manager-字体管理软件”:让您的字体管理更轻松更高效!
  8. Network Saboteur/网络破坏者
  9. linux 可道云_Linux安装kodexplorer(可道云)
  10. flutter创建新项目或者接手老项目配置环境依赖等全流程