美文网首页饥人谷技术博客
JS 里的数据类型转换

JS 里的数据类型转换

作者: 孙炎_ | 来源:发表于2019-01-07 17:08 被阅读3次

JS中的7种数据之间大部分是可以相互转换的,这篇文章做一个小小的总结。

一.任意类型转字符串

1.toString()方法。

true.toString = 'true'
({}).toString = '[object Object]'

对于数据类型nullundefined是不能够用toString()方法的。
2.全局方法String()

String(1)
 '1'
String(true)
'true'
String(null)
 'null'
String(undefined)
'undefined'
String({})
'[object Object]'

3.任意类型用+拼接空字符串 ''

1 + ''
'1'
true + ''
'true'

需要注意的是当对象与空字符串拼接时,用以下方式:

{} + ''
0
var o = {}
o + ''
'[object Object]'

二.转数字类型

1.全局方法 Number()
使用Number函数,可以将任意类型的值转化成数值。Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。

  1. parseInt(x, 10) ,其具体的使用方式见:MDN

3.parseFloat(x) ,具体使用方式见:MDN

4.X - 0 ,当用字符串类型减去数字0,也可以实现类型的转换

'1' - 0
1
  1. + X 与方式4类型,通过+号与X拼接的形式

三.任意类型转Boolean

1.全局方法 Boolean(x)
2.技巧:!! x x的双重否定还是它自身。
JS中有六个值会被视为false,见我的上一篇文章:JS里的数据类型

四.用内存图解释关于object的常见问题

用一个比较简单的方法解释JS数据在内存中存储:
1.JS 引擎将内存分为代码区和数据区
2.我们只研究数据区
3.数据区分为 Stack(栈内存) 和 Heap(堆内存)
4.简单类型的数据直接存在 Stack 里
5.复杂类型的数据是把 Heap 地址存在 Stack 里
例如:

var a = 1
var b = a
var b = 2
a
1

b变量的变化并不会影响a变量,因为简单的数据类型会存储在stack内存中。但对于复杂数据如object,当我们声明一个对象时,其在stack中存储一个地址,该地址是其在heap中的具体地址。简单地说,就是stack中是该对象的引用。以如下常见的面试题为例:

var a = 1
var b = a
b = 2
请问 a 显示是几?  
// 1
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?
// 'a'
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?
// 'b'
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?
// 'a'

如下关于变量提示的面试题:

var o = {self:o}
o.self
//undefined

因为上面的代码相当于如下:

var o 
o = {self:o}
o.self
//undefined

变量o被先声明了却没有赋值,所以为undefined。
6.垃圾回收
如果一个对象在heap中没有被引用了,就会被浏览器当作垃圾,在合适的时间被回收,释放出该内存空间。但在IE 6浏览器中,会存在垃圾回收的BUG,称为内存泄露。

6.深拷贝与浅拷贝

var a = 1
var b = a
b = 2 //这个时候改变 b

上述代码中,a 完全不受 b 的影响,我们就称之为深拷贝。
1.对于简单类型的数据来说,赋值就是深拷贝。
2.对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
如上述JS常见面试题中的一道题:

var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true

对b进行操作后,a也被改变了,这种情况就是浅拷贝。如果对a对象heap内存中的数据也进行完全拷贝,此时a与b就不会互相影响,这种情况就是深拷贝。

(完)

相关文章

  • JS 里的数据类型转换

    JS 里的数据类型转换 Js中的数据类型一共有7种,即number,string,boolean,underfin...

  • 2、强制数据类型转换

    数据类型转换: 在js中,数据类型的转换有两种,分别是自动转换和强制转换 自动转换: 自动转换是用JS进行某些操作...

  • JS里的数据类型转换

    上一篇文章(JS里的数据类型)介绍了js中的数据类型。这篇主要介绍数据类型转换。 一、任意类型转字符串 转换成st...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • JavaScript的显式转换和隐式转换

    js的显式转换和隐式转换都是数据类型的转换;js的数据类型是弱类型的,即可以给变量赋值为任意的数据类型,当进行运算...

  • javaScript中数据类型转换方法

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • JS隐式数据类型转换

    隐式数据类型转换介绍 前面有总结过 JS数据类型转换 Number(), toString(), parseInt...

  • JS的基本小结

    JS基本输出方式 JS数据类型 变量 常量 变量常量小练习 声明提前 隐式转换 显示转换/强制转换

  • JS 里的数据类型转换

    JS 里的数据类型转换 某类型转换为字符串的方法eg.var a=4 用 变量.toString()方法,a.to...

网友评论

    本文标题:JS 里的数据类型转换

    本文链接:https://www.haomeiwen.com/subject/owrurqtx.html