关于JavaScript的包装类型和进制转换

    尽管在日常的学习和基本的项目使用中,大多数的程序员基本都不会运用到进制转换。但是在用到的时候,网络上多数的博客还是比较随意的链接。所以我决定开始编写博客,把项目中会使用到的一些关于各方面问题和解决方案记录下来。

    首先需要说明的是,我们在项目里看到的类似这样的代码:

var i = 33; i.toString();  
//输出: 33

    这样会导致一些人误以为,这是基本类型自带的方法。然而实际并不是,在程序里会自动生成一个对应的包装类型的对象,进行操作。  因为是对象,所以才能够调用对象所拥有的方法。举个反面例子。   

33.toString(); // SyntaxError: identifier starts immediately after numeric literal

   也许有人会说,这个与上一个例子不是一样的吗?

    实际上这个是错误,原因在于,我们在调用i的时候,是调用了对应的包装类型Number(),他会将33包装成Number类型,然后在实际的调用toString时,实际上是在调用这个Number类型。而我们直接使用错误例子中的写法时,我们操作的是33这个常量,所以程序会爆错误。ES为我们提供了3种基本包装类型Number,String,Boolean 

    一般不直接创建包装类型和引用类型,因为这样造成的问题是,分不清是在处理基本包装类型还是引用类型。

    

var booleanObject = new Boolean(false); 
var compare = booleanObject && true; 
console.log("result:",compare);//result true;

原因很简单,你不是在判断fales && true,而是一个Object&&true,所以结果是True了。

——————————————————————————————————————

包装和引用类型就简单讲一讲,接下来就是关于进制转换了。首先是十进制转其他进制。

var dec=143; 
console.log("十进制数:",dec); console.log("转8进制:",dec.toString(8)); 
console.log("转32进制:",dec.toString(32));
console.log("转16进制:",dec.toString(16));     
    
/*为什么不用 "143".toString("8"); 
  这是因为“143”是字符串类型,而不是Number类型,“143”.toString(8)不用管传递什么,结果都是他本身*/ 

    /*为什么不用 143.toString(8),麻烦看看之前的包装类型 */

然后是其它进制转换为十进制

 //只是数字,并不代表什么进制,注意这里是字符串,需要使用ParseInt转换
var num = "10"

//parseInt(num,2) 将 “10”作为二进制数转换为十进制
console.log("二进制转十进制:",parseInt(num,2));
console.log("八进制转十进制:",parseInt(num,8));
console.log("十六进制转十进制:",parseInt(num,16));

然后是其他进制转其他进制,也是运用上面的方法(比如十六进制转八进制)

console.log("十六进制转八进制:",parseInt("FF",16).toString(8));//这里的parseInt会自动创建包装类型。

文章分享就到这里,希望多多支持,有时间可以一起交流学习。

所有的伟大,都来自于一个勇敢的开始。

猜你喜欢

转载自blog.csdn.net/dubismile/article/details/79635089
今日推荐