javascript数据类型中的一些小知识点(推荐)


Posted in Javascript onApril 18, 2019

1. undefined 和 null

undefined是一个变量而不是一个关键字,所以可以被重新赋值。为了避免歧义,一般推荐用void 0 来获取undefined;

null是一个关键字,所以可以放心地使用null。

Undefined 跟 null 有一定的表意差别,null 表示的是:“定义了但是为空”。所以,在实际编程时,我们一般不会把变量赋值为 undefined,这样可以保证所有值为 undefined 的变量,都是从未赋值的自然状态。 

function test(){
  var undefined = 123;
  console.log(undefined) 
}
test() ==> 123

2. +0 和 -0

JavaScript 中有 +0 和 -0,在加法类运算中它们没有区别,要区别他们的话,需要使用1/x 

3/0 ==> Infinity
3/-0 ==> -Infinity

3. 0.1 + 0.2 = 0.3?

在JS中,0.1+0.2是不等于0.3的,因为0.1在计算机中用二进制表示的话,会产生无限循环位数。类似于十进制中,三分之一就是无限循环小数。

所以对这些循环小数进行数学运算时,并将二进制数据再转换成十进制时,也还是无线循环小数,对末尾进行截取后,得到的值就是0.30000000000000004

正确的比较方法是使用JS提供的最小精度值,检查等式左右两边差的绝对值是否小于最小精度

Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON
true

4. 666 和 new Number(666)的区别

666是一个number类型的数字,而Number(666)是一个对象类型的数据。

‘HELLO'.charAt(1) ==》 'E'

上门代码中,点(.)运算符提供了装箱操作,会根据一个基础类型构造一个临时对象,所以能在基础类型上调用对应对象的方法

5. parseInt 和 parseFloat

parseInt(string, radix)

javascript数据类型中的一些小知识点(推荐)

parseInt(15,6)
11 ==> 1*6+5

parseInt(0x15) 
21 ==> 16*1+5

parseFloat 则直接把原字符串作为十进制来解析,它不会引入任何的其他进制

6. 装箱转换

每一种基本类型 Number、String、Boolean、Symbol 在对象中都有对应的类,所谓装箱转换,正是把基本类型转换为对应的对象。

Symbol 比较特殊,不能直接用 new Symbol获得对应的对象, 可以用Object(Symbol('hello')) 来获得。

var symbolObject = Object(Symbol("a"));

  console.log(typeof symbolObject); //object
  console.log(symbolObject instanceof Symbol); //true
  console.log(symbolObject.constructor == Symbol); //true

7. 拆箱转换

把对象转换成number或string时,会默认进行拆箱转换,即会调用对象内置的toString或者valueOf方法将对象转换成基本类型

javascript数据类型中的一些小知识点(推荐)

这儿定义了一个obj对象,重写了它的valueOf和toString方法进行测试,可以看到,当Number(obj)时,valueOf优先于String执行,但是当这2个方法都没有返回基本类型的数据时,就会产生错误。

 javascript数据类型中的一些小知识点(推荐)

当valueOf方法返回基本类型的数据时,成功将obj转换成了数字,而且toSring方法没有执行。

 javascript数据类型中的一些小知识点(推荐)

当valueOf返回非基本类型时,toString方法才会被调用。只有当Object到 String 的拆箱转换才会优先调用 toString方法。

 注:ES6允许对象通过显式指定 toPrimitive Symbol 来覆盖原有的行为。

var o = {
    valueOf : () => {console.log("valueOf"); return {}},
    toString : () => {console.log("toString"); return {}}
  }

  o[Symbol.toPrimitive] = () => {console.log("toPrimitive"); return "hello"}


  console.log(o + "")
  // toPrimitive
  // hello

以上所述是小编给大家介绍的javascript数据类型中的一些小知识点解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript cookies操作集合
Apr 12 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
Angularjs中使用layDate日期控件示例
Jan 11 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 Javascript
详解Immutable及 React 中实践
Mar 01 Javascript
使用Vue实现简单计算器
Feb 25 Javascript
vue中的使用token的方法示例
Mar 10 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
Aug 20 Javascript
在element-ui的select下拉框加上滚动加载
Apr 18 #Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 #Javascript
vue模式history下在iis中配置流程
Apr 17 #Javascript
详解Vue 全局变量,局部变量
Apr 17 #Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 #Javascript
Angular Excel 导入与导出的实现代码
Apr 17 #Javascript
详解Vue路由自动注入实践
Apr 17 #Javascript
You might like
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
js星星评分效果
2014/07/24 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
python飞机大战游戏实例讲解
2020/12/04 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
后勤人员自我评价怎么写
2013/09/19 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
离职感谢信怎么写
2015/01/22 职场文书
党员转正申请报告
2015/05/15 职场文书
python某漫画app逆向
2021/03/31 Python
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python