JS 里的数据类型转换
2019-03-29 本文已影响0人
饥人谷_子安
本篇主要介绍一些有关于JS的数据类型转换的小知识
类型转换
number | String | boolean | Symbol | null | undefined | object | |
---|---|---|---|---|---|---|---|
number | toString()/与''相加/String()全局函数 | Boolean()/!! 赋值内容 | |||||
String | toString()/与''相加/String()全局函数 | Boolean()/!! 赋值内容 | |||||
boolean | |||||||
Symbol | X | Boolean()/!! 赋值内容 | |||||
null | toString()报错,无法转换,null没有toString的API/与''相加/String()全局函数 | Boolean()/!! 赋值内容 | |||||
undefined | toString()报错,无法转换,不能读取undefied的toString属性/与''相加/String()全局函数 | Boolean()/!! 赋值内容 | |||||
object | toString,但是得到的却是[object Object],无法做到正确的转换,除非重写一个toString/与''相加/String()全局函数 | Boolean()/!! 赋值内容 |
转换字符串类型
- 通过console.log()打印出来的内容为字符串类型,在使用console.log()时,如果console.log()发现需要打印出来的内容类型不是字符串,会自动将内容的类型转换为字符串;
- 老司机如何快速转换为字符串:在赋值时,在该变量后加上一个
+ ''
即可,此时即使是无法进行转换的null也可以转换为字符串类型
转换boolean类型
在布尔类型中0代表着没有内容,为false;其他数字代表着存在内容,为true;''代表着没有内容,为false;' '代表着存在内容,为true;但在对象中则不一样了,只要是对象一律时true:
- 在JS的number类型中,除0与NaN转换为boolean类型时为flase,其他数值皆为true;
- 在JS的String类型中,除''转换为boolean类型时为flase,其他字符串转换时皆为true;
- 在JS的null类型中,null类型的值转换为boolean时皆为flase;
- 在JS的undefined类型中,undefined类型的值转换为boolean时皆为false;
- 在JS的object类型中,object类型的值转换成boolean时皆为true;
PS:JS中的五个falsy值分别为0,NaN,'',null,undefined;
如何将其他类型转换为number类型?
这里以将'1'转换为1的操作进行举例
1. number('1') === 1;
2. parseInt('1', 10) === 1;
3. parseFloat('1.23') === 1.23;
4. '1' - 0=== 1;//得到一个number类型的值;
5. + '1' === 1; + '-1' === -1//取正,得到一个number类型,'+'表示取其原本的值,但是是以number的形式进行表示;
PS:使用parserInt()对变量进行类型转换时,如果需要进行类型转换的变量内容并不是全是数字时,则会该变量的开头处开始,能转变多少值为number类型就转换多少;JS中中所有的数字都是以64位浮点位的形式存在的;JS存储字符时,每个字符长度为16位bit
垃圾回收
- 未被引用的对象就是垃圾;
- IE6浏览器中存在着bug,若未完全关闭IE6浏览器,只是关闭一个tab页面时,此时IE6不会认为未被引用的对象是垃圾,此时需要将该对象手动标记为垃圾:
var fn = function(){};
document.body.onclick = fn;
fn = null//将fn对象手动标记为垃圾
深拷贝与浅拷贝
在JS中若改变一个变量时,不会影响其他变量,则称为深拷贝;JS中基本类型的赋值就是深拷贝,如:
var a = 123;
var b = 123;
var obj = {
'name': 'obj'
}
var obje = {
'name': 'obje'
}
//上述代码就是进行深拷贝操作
在JS中若改变一个变量时,对于其他变量产生影响,则称为浅拷贝;JS中object类型的赋值就是浅拷贝,如:
var 对象 = {
'name': '对象'
};
var 对象1 = 对象;
对象1.name = '对象1';
console.log(对象1.name);// => 对象1
console.log(对象.name);// => 对象1