javascript 类型转换

本文深入解析JavaScript中的类型转换,包括Number(), parseInt(), parseFloat(), String(), toString()等函数的使用,探讨隐式类型转换的规则,以及特殊类型的处理,如NaN, null, undefined, Symbol等。同时,文章还介绍了try-catch语句的执行机制,对象比较,以及toLocaleString和toString方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示类型转换

Number()

  1. var num = Number(true); console.log(typeof(num) + num) —结果:number: 1
  2. var num = Number(false); console.log(typeof(num) + num) —结果:number: 0
  3. var num = Number(null); console.log(typeof(num) + num) —结果:number: 0
  4. var num = Number(undefined); console.log(typeof(num) + num) —结果:number: NaN
  5. var num = Number(“-123”); console.log(typeof(num) + num) —结果:number: -123
  6. var num = Number(“123abc”); console.log(typeof(num) + num) —结果:number: NaN

parseInt()

  1. 将数字转化为整形,也可以将字符串转化为数字。
  2. var demo = 10; console.log( parseInt(demo,16));—将10当16进制转化为10进制 number:17
  3. var demo = "123.12abc"; console.log( parseInt(demo,16));— number:123 以非数字位为断点转化

parseFloat()

  1. var demo = "123.12abc"; console.log( parseInt(demo,16));— number:123.12 以非数字位为断点转化**(除了小数点)**

String()

  1. 这里写什么东西都会变成相对应的字符串

toString()

“12".toString();
"123".toString(8);以8进制将123转化成字符串
  1. undefined null不能使用此函数

隐式类型转换

  1. var num = 1+'1' ; console.log( typeof num) —结果:string
  2. var num = 1*'1' ; console.log( typeof num) —结果:number
  3. var num = 1-'1' ; console.log( typeof num) —结果:number
  4. var num = '2'+'1' ; console.log( typeof num) —结果:string
  5. var num = '2'-'1' ; console.log( typeof num) —结果:number
  6. var num = '2'*'1' ; console.log( typeof num) —结果:number

isNaN()

  1. 隐式转化Number(demo)—>再与NaN比较是NaN输出true,否则输出false

++ –

  1. 隐式转化Number(demo)—>再++ –

- + * / =

  1. 隐式转化Number(demo)—>再进行- * / =
  2. +号两侧有一个string类型就都转化为string

< >

  1. 100>10>0 false 100>10>0 true 挨个计算(100>10)为true就转化为1了,再和后面的数值比较。

undefined>0   false; undefined<0   false; undefined ==0 false;
null>0  false; null<0  false; null ==0   false;  
null ==undefined;  true 
NaN == NaN ;   false
typeof(typeof(undefined))   string
typeof NaN `===` 'number'  ; true
0==null;   false
0==undefined;  false
  1. Symbol
    这个类型转换为字符串必须是显示的,隐式转换会出错
var s = Symbol('aabb');
String(s);        //"Symbol(aabb)"
s + "";           //TypeError: Cannot convert a Symbol value to a string

25.try catch 语句
try 中的 return 和 throw 会在有 finally 语句是中的 return 或 throw 覆盖(这里的确是覆盖,而不是前一个 return 未执行,

(() => { var i = 0;try {  return ++i;} finally { return ++i;}})(); // 2
var a = {pro: 29};
var b = {pro: 43};
a < b;     //false
a == b;    //false
a > b;     //false
a <= b;    //true
a >= b;    //true

对于大于(等于)和小于(等于)号,两个对象 a 和 b 都被转换成了字符串 “[object Object]”,所以他们应该是相等的,所以 a < b 和 a > b 都是 false,而 a <= b 和 a > = b 都是 true。但是 a == b 为 false。有了上面的知识,就很好理解这个问题,a, b都是对象,所以不发生类型转换,而两个对象引用不同,结果为 false。
27.数组中的 null 和 undefined
数组中的 null 和 undefined 会在转换为字符串时被看做空,也就是可以直接忽略。== 会按前面的类型进行转换

"" == [null];                //true
"1,,3" == [1,undefined,3]    //true

27.toLocaleString 和 toString
toLocaleString 和 toString 方法同时存在,它定义了个性化的字符串转换功能,对于对象而言 toLocaleString 和 toString 是一样的。不过Array, Number, Date 和TypedArray(ES6中的类型,这里不讨论)都重写了 toLocaleString。比如说数值类型:

console.log((1234).toLocaleString());   //1,234
console.log((1234567).toLocaleString('zh-Hans-CN-u-nu-hanidec', {useGrouping: false})); //一二三四五六七
console.log((1234567).toLocaleString('zh-Hans-CN-u-nu-hanidec', {useGrouping: true}));  //一,二三四,五六七

日期类型:
得到一些地域性的时间表示

var date = new Date();
console.log(date.toString());           //Tue Apr 15 2014 11:50:51 GMT+0800 (中国标准时间)
console.log(date.toLocaleString());     //2014-4-15 11:50:51
console.log(date.toLocaleDateString()); //2014-4-15
console.log(date.toLocaleTimeString()); //上午11:50:51

数组类型的 toLocaleString 就是将数组中的数值类型和日期类型分别按 toLocaleString 转换为字符串,再形成整体字符串。
关于 toLocaleString 的定义官方也是故意没给出具体的实现细节【坑19】,这一点完全不能理解,所以这个方法用的场合也比较有限,这里不再赘述了

28.-0和+0是一致的

console.log(+0 === -0);            //true
console.log(+0 == -0);             //true
parseInt() 和 Number() 都会忽略字符串首尾的空格,但parseInt() 不会忽略格式化字符,而Number() 会将格式化字符与空格一起忽略
Number("  34\n\t ");    //34
Number("  \t34 ");     //34
Number("  3\t\n4 ");    //NaN,   不和开头结尾的空格一起的格式化字符不会被忽略
parseInt("  \t34 ");     //NaN
他们对空字符串的处理也不一样
Number("   ");     //0,   空格被忽略了,所以 "    " 等价于 ""
parseInt("   ");     //NaN,   空格被忽略了,所以 "    " 等价于 ""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值