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 import css实例代码
Jul 18 Javascript
javascript prototype,executing,context,closure
Dec 24 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
Apr 08 Javascript
封装了一个js图片轮换效果的函数
Sep 28 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
使用javascript实现判断当前浏览器
Apr 14 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 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
PHP中数组定义的几种方法
2013/09/01 PHP
PHP实现添加购物车功能
2017/03/06 PHP
客户端静态页面玩分页
2006/06/26 Javascript
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
js数组操作学习总结
2013/11/04 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python实时获取cmd的输出
2015/12/13 Python
人工神经网络算法知识点总结
2019/06/11 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
公司员工检讨书
2014/02/08 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
MySQL数据库表约束讲解
2022/06/21 MySQL