转换string_类型转换详解
类型转换分类
- 显示类型转换
- Number( )
- String( )
- Boolean( )
- 隐式类型转换
- 运算
- 判断语句
- native调用
- ..............
转换为字符串
1、转换为字符串场景
- 能使用的办法
- toString()
- String()
- 隐式转换(一般都是调用其toString)
- 加号运算的时候,如果某一边出现字符串,则是字符串拼接
- 把对象转换为数字,需要先toString()转换为字符串,再去转换为数字
- 基于alert/confirm/prompt/document.write...这些方式输出内容,都是把内容先转换为字符串,然后再输出的
2、转换字符串规则
把其他类型转换为字符串,一般都是直接""包起来,只有下面几种情况比较特殊
{}
: 只有{}普通对象调取toString是调用的Object.prototype.toString,不是转换为字符串,而是检测数据类型,返回结果是“[object object]”,更准确的理解应该是如下
``` 1. 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果。需要注意的是,原始值到字符串的转换在表3-2中已经有了详尽的说明。
- 如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么JavaScript会调用valueOf()方法。如果存在这个方法,则JavaScript调用它。如果返回值是原始值,JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果。
- 否则,JavaScript无法从toString()或valueOf()获得一个原始值,因此这时它将抛出一个类型错误异常 ```
[]
: 使用join()方法进行链接
String(null) // 'null'
String(undefined) // 'undefined'
String(true) // 'true'
String(1) // '1'
String(-1) // '-1'
String(0) // '0'
String(-0) // '0'
String(Math.pow(1000,10)) // '1e+30'
String(Infinity) // 'Infinity'
String(-Infinity) // '-Infinity'
String(function(){}) // "function(){}"// 数组转换为字符串
String([]) // ""
String(['a']) // "a"
String([1,2]) // "1,2"
String(['a', 1]) // 'a, 1'
String([1,[2,3]]) // '1,2,3'// 对象转换为字符串
String({}) // '[object Object]'
String({name: 12}) // "[object Object]"
转换为数字
1、转换为数字场景
- 特定需要转换为Number的 方法
- Number([val])
- parseInt/parseFloat([val])
- 隐式转换(浏览器内部默认要先转换为Number在进行计算的)
- isNaN([val])
- 数学运算(特殊情况:+在出现字符串的情况下不是数学运算,是字符串拼接)
- 在==比较的时候,有些值需要转换为数字再进行比较
2、转换数字规则
一般隐式转换都是自动调用的Number
string -> number:
- 如果是纯数字的字符串,则直接将其转换为数字
- 如果字符串中有非数字的内容,则转换为NaN
- 如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
- 如果字符串中包含有效的十六进制格式,例如"0xf",则将其他转换为相同大小的十进制整数值;
Object -> number:
- ``` // 先转换为字符串,在转换为数字
- 如果对象具有valueOf()方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(如果需要的话)并返回这个数字。
- 否则,如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回 [10] 。
- 否则,JavaScript抛出一个类型错误异常。 ```
Number('') // 0
Number(' ') // 0
Number('123') // 123
Number('12.3') // 12.3
Number('12abc') //NaN
Number('0xf') // 15
Number(undefined) //NaN
Number(null) // 0
Number(true) // 1
Number(false) // 0Number({}) // NaN
Number([]) // 0
Number([1]) // 1
Number([1, 2]) // NaNparseInt('12ab3') // 12
parseInt('ab124') //NaN
parseInt(12.3) // 12parseFloat('12ab3') // 12
parseFloat('ab124') //NaN
parseFloat(12.3) // 12.31+undfined // NaN
1 + null // 1
转换为布尔
- 基于以下方式可以把其它数据类型转换为布尔
- ! 转换为布尔值后取反
- !! 转换为布尔类型
- Boolean([val])
- 隐式转换
- 在循环或者条件判断中,条件处理的结果就是布尔类型值
规则:只有 ‘0、NaN、null、undefined、空字符串’ 五个值会变为布尔的FALSE,其余都是TRUE
https://blog.csdn.net/itcast_cn/article/details/82887895?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
==比较规则
- null==undefined:true,但是换成===结果是false(因为类型不一致),
剩下null/undefined和其它任何数据类型值都不相等
- 字符串==对象 要把对象转换为字符串
- 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
{}=={} // false
[]==[] // false
NaN==NaN // false//ull==undefined:true,剩下null/undefined和其它任何数据类型值都不相等
undefined == null // true
undefined == '' // false
null == '' // false'1' == new String(1) // true
题目推荐
{}+[] // 0
({}+[]) // "[object Object]"
[]+{} // "[object Object]"{a:0}+1 // 1
{}+[] = 0
这个怎么理解呢?
现在在写代码过程中,每个项目组的规范会有所不同,有些项目组结尾加分号,有些则不加,当不加分号的时候,下面代码也不会在代码中报错,
function getName(){}
+[]// 压缩后
function getName(){}+[]
所以最后 就计算 +[] // 0
![] // false ->!(Boolean([]))
+[] // 0+![] // 0
[]+[] // ""
{}+{}//"[object Object][object Object]"
[]+![] // false => 先计算![],再把[]转换为String([])
''+{} //"[object Object]"
{}+'' //0// 数组访问map属性
[]["map"] // ƒ map() { [native code] }
[]['map']+[] // "function map() { [native code] }"[]==![] // true 都转换为数字都是0
let result = 10+false+undefined+[]+'Tencent'+null+true+{}; // "NaNTencentnulltrue[object Object]"
解析过程
》 10 + false // 10,10 + Number(false) = 10 ,10 + 0 = 10
》 10 + undefined // 10 + Number(undefined) = 10 + NaN = NaN
》 NaN + [] = NaN + String([]) = NaN + '' = 'NaN';
》 'NaN' + 'Tencent' = 'NaNTencent'
》 'NaNTencent' + null = 'NaNTencent' + String(null) = 'NaNTencent' + 'null' = 'NaNTencentnull'
》 'NaNTencentnull' + true = 'NaNTencentnull' + String(true) = 'NaNTencentnull' + 'true' ='NaNTencentnulltrue'
》 'NaNTencentnulltrue' + String({})= 'NaNTencentnulltrue'+'[object Object]' = 'NaNTencentnulltrue[object Object]'
参考链接
https://wangdoc.com/javascript/features/conversion.html
js类型转换的各种玩法
转换string_类型转换详解相关推荐
- java自动转换_java类型转换详解(自动转换和强制转换)
自动转换 class Hello { public static void main(String[] args) { //自动转换 int a = 5; byte b = 6; int c = a ...
- jquery将html转为pdf文件,HTML+CSS入门 jsPDF插件实现将HTML页面转换成PDF详解
本篇教程介绍了HTML+CSS入门 jsPDF插件实现将HTML页面转换成PDF详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.目的:在前段是 jQuery库 或 ...
- 怎样将pdf转换成jpg详解
怎样将pdf转换成jpg详解 [摘要]当你把扫描好的PDF文件送到印刷室进行印刷时,而人家并不接受PDF文件格式,只认同图片格式的文件,此时你肯定想着怎么才能把PDF文件转变成JPG图片格式?那么,接 ...
- java中带符号十六进制转换成十进制详解
java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...
- “戏”说Spark-Spark核心-RDD转换操作算子详解(一)
"戏"说Spark-Spark核心-RDD转换行动类算子详解 算子概述 对于RDD可以有两种计算方式: 转换(返回值还是一个RDD)---懒执行 操作(返回值不是一个RDD)--- ...
- Mysql 数据类型转换详解 (convert、cast)
文章目录 1 概述 2 类型转换 3 扩展 3.1 日期时间函数 1 概述 #mermaid-svg-ItXfZsGMo79eou3H {font-family:"trebuchet ms& ...
- 小白学python之整型,布尔值,十进制二进制转换和字符串详解for循环!
整型与字符串转化 十进制转二进制. python2,存在int 整型和long(长整型),在python3里就是int/获取的是浮点数 小数 print(bin(15)) 这样可以通过代码来计算十进制 ...
- html中隐式转换成数字,详解JS中的隐式类型转换
JS中隐式类型转换 JS中的数据类型 JS中的数据类型分为两大类: 1.基本数据类型: 1.String 字符串 表示一段文本,例如:人的姓名.地址等 2.Number 数值 3.Boolean 布尔 ...
- VC常见数据类型转换详解
我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; c ...
最新文章
- PostgreSQL 9.3 beta2 stream replication primary standby switchover bug?
- peewee flask pwiz 中使用模型 过一段时间报错 peewee.InterfaceError: (0, '') 的解决方式
- UNIX再学习 -- 标准I/O
- linux du命令使用:目录大小排序
- java代码复数包括虚部和实部,Java中编写Applet程序验证复数类(在问题补充中)实现接收用户输入的复数的实部和虚部,计算复数与复数,复数与实数的加减,乘除操作...
- PHP vscode+XDebug 远程断点调试服务器上的代码
- Cas单点登录配置数据查询用户
- c程序设计停车场收费管理系统_智能车牌识别停车收费管理系统
- wxpython wx listctrl_wxPython实现指定单元格可编辑的ListCtrl | 学步园
- 全屏窗口指令_在iOS 14系统中,快捷指令原来有多达11种运行方式(上篇)
- KD树(网易游戏笔试)
- 大学物理复盘 | 简明大学物理学第一章——质点运动学思维导图梳理(复习专用)
- 【基于机器视觉与深度学习的人机对弈机器人——决策篇】
- 抓包软件wireshark分析
- 递归的理解(数据结构)
- 百度翻译用户群体及部分功能分析
- 资产信息网赋能律师事务所律师
- 网页打开新窗口——Window.open()详解
- 【报错及解决】Variable w already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally
- h'tml和java代码,Tapestry 教程(七)在Tapestry中一起使用Hibernate
热门文章
- mysql 类型 自动转化_自动MySQL数据类型转换
- ANSI和UNICODE字符串处理函数
- CListCtrl的用法总结
- mseloss pytorch_PyTorch 卷积与BatchNorm的融合
- Python-OpenCV 笔记3 -- 霍夫变换(Hough)
- 牛客多校三 B Black and white
- 【机器学习】图解机器学习中的 12 种交叉验证技术
- 【数学基础】一份非常适合人工智能学习的概率论基础材料中文版 (CS229概率论)...
- 【Python基础】Python安装第三方库太慢?配置好这个速度飞起
- 【机器学习基础】时间序列测试题的40题,看看你对时间序列的了解水平