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 当前日期加(天、周、月、年)
Aug 09 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
各情景下元素宽高的获取实现代码
Sep 13 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
JS 作用域与作用域链详解
Apr 07 Javascript
jquery点击改变class并toggle的实现代码
May 15 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
原生JS实现九宫格抽奖效果
Apr 01 Javascript
react-native使用react-navigation进行页面跳转导航的示例
Sep 07 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
Mar 09 Javascript
利用Blob进行文件上传的完整步骤
Aug 02 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面试题附答案
2009/01/07 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
python 安装移动复制第三方库操作
2020/07/13 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python爬虫请求头的使用
2020/12/01 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
个人作风剖析材料
2014/02/02 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
学生逃课检讨书
2015/02/17 职场文书
品质保证书格式
2015/02/28 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL