Open Yuanfang-fe opened 4 years ago
偶然在别人的博客发现了这么一行神秘代码
(46840404742).toString(36)
然后我在console控制台里执行了一下 🤩好有个性的签名啊!!!恩,这确实很前端
我也生成一个自己的试试
同时也产生了几个疑问: 一、number类型调用toString()为啥要加括号呢?如果不加会怎样?
然后去查了下明白了,如果不加括号,这个点会被 JavaScript 引擎解释成小数点,从而报错。 放在括号里,后面的点表示调用对象属性。
同理:
二、36代表了36进制,那为什么是36呢? 原来英文字母a-z表示10-35,英文字母只有26个加上数字0-9只有36个了,所以只能到36进制,而没有37、38、39、40...进制。那最小是几进制呢? 所以进制是2~36,默认是10进制。
三、这里的2730329055916是基本类型,基本类型应该没有toString()方法才对。 然后又去google了下, 嗖得寺内,原来在读取基本类型的时候,js后创建一个对应的基本包装类型的对象,从而调用一些方法。如下:
2730329055916
还需要注意的是null 和 undefined 是没有包装类型的,所以调用toString()是会报错的。
总结: Number、 String、 Boolean、 Object、Function、Array、 Date、RegExp、Error、Map、Set、Symbol 都可以调用toString()方法。 但也有区别,除了Symbol都是从Object的原型上继承来的,而Symbol是基本数据类型,却没有构造函数。
MDN的解释是:Symbol 对象拥有自己的 toString 方法,因而遮蔽了原型链上的 Object.prototype.toString()
参考链接: https://www.cnblogs.com/xiaohuochai/p/5557387.html https://www.cnblogs.com/youhong/p/6837534.html https://javascript.ruanyifeng.com/stdlib/number.html
有不对的地方,请务必指正,万分感谢。
偶然在别人的博客发现了这么一行神秘代码
然后我在console控制台里执行了一下 🤩好有个性的签名啊!!!恩,这确实很前端
我也生成一个自己的试试
同时也产生了几个疑问: 一、number类型调用toString()为啥要加括号呢?如果不加会怎样?
然后去查了下明白了,如果不加括号,这个点会被 JavaScript 引擎解释成小数点,从而报错。 放在括号里,后面的点表示调用对象属性。
同理:
二、36代表了36进制,那为什么是36呢? 原来英文字母a-z表示10-35,英文字母只有26个加上数字0-9只有36个了,所以只能到36进制,而没有37、38、39、40...进制。那最小是几进制呢? 所以进制是2~36,默认是10进制。
三、这里的
2730329055916
是基本类型,基本类型应该没有toString()方法才对。 然后又去google了下, 嗖得寺内,原来在读取基本类型的时候,js后创建一个对应的基本包装类型的对象,从而调用一些方法。如下:还需要注意的是null 和 undefined 是没有包装类型的,所以调用toString()是会报错的。
总结: Number、 String、 Boolean、 Object、Function、Array、 Date、RegExp、Error、Map、Set、Symbol 都可以调用toString()方法。 但也有区别,除了Symbol都是从Object的原型上继承来的,而Symbol是基本数据类型,却没有构造函数。
MDN的解释是:Symbol 对象拥有自己的 toString 方法,因而遮蔽了原型链上的 Object.prototype.toString()
参考链接: https://www.cnblogs.com/xiaohuochai/p/5557387.html https://www.cnblogs.com/youhong/p/6837534.html https://javascript.ruanyifeng.com/stdlib/number.html
有不对的地方,请务必指正,万分感谢。