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 相关文章推荐
二级域名转向类
Nov 09 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 Javascript
JS判断不能为空实例代码
Nov 26 Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
JavaScript中输出标签的方法
Aug 27 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
EasyUI为Numberbox添加blur事件的方法
Mar 05 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
如何用JavaScipt测网速
May 09 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 UTF8编码内的繁简转换类
2009/07/20 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
js实现移动端轮播图
2020/12/21 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
浅谈flask源码之请求过程
2018/07/26 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
2014道德模范事迹材料
2014/02/16 职场文书
《月迹》教学反思
2014/02/19 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
2014年党小组工作总结
2014/12/20 职场文书
校园广播站开场白
2015/06/01 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
关于 Python json中load和loads区别
2021/11/07 Python
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL
httpclient调用远程接口的方法
2022/08/14 Java/Android