资讯专栏INFORMATION COLUMN

【JS】关于JS的一些知识点(JS基础,纯记录)

SwordFly / 1410人阅读

摘要:如何让根据拆箱转换,以及的隐式转换,可以如下写为什么计算机中所有的数据都是以二进制存储的,所以在计算机计算时要把数据先转换成二进制进行计算,然后把计算结果转换成十进制。会存在精度丢失问题和的二进制都是以无线循环的小数的二进制的二进制

本想着记笔记里,但是笔记里没有分类,还是以文章的形式,当个人总结吧,这一篇就当作JS基础篇的记录吧,有修改的和新增的持续更新~

关于JS的一些小技巧
1:JS中toString和valueof()区别

toString():返回一个反映这个对象的字符串

valueOf():返回它相应的原始值

console.log([1,2,3].toString()); // "1,2,3"
console.log(new Date(2015,4,4).toString()); // "Mon May 04 2015 00:00:00 GMT+0800
c"
console.log(new Date(2015,4,4).valueOf()); //  "1430668800000  "

注意: Math和Error没有valueOf方法

字符串转换为数字的三种方法js
1:pasreInt()parseFloat()方法:转换不成功的返回NaN

2:强制类型转换: Boolean(val)/Number(val)/String(val)

3: 利用js变量弱类型转换:*1 (实际上调用了.valueOf方法),然后使用Number.isNaN来判断是否为NaN,或者使用a!==a来判断是否为NaN,因为NaN!==NaN

"32"*1  //32
"ds"*1  //NaN

也可以使用+来转化为数字,一元正号位于操作数前面,计算操作数的数值,如果操作数不是一个数值,会尝试将其转坏为一个数值,参考见 https://developer.mozilla.org...

+"123" //123
""ds"  //NaN
+null  //0
+undefined //NaN
+{valueOf: () => "3"}  //3
2:Boolean可以过滤掉数组的所有假值

除了false,null,undefined,0,"",NaN,都是假值

const compact = arr => arr.filter(Boolean)
compact([0, 1, false, 2, "", 3, "a", "e" * 23, NaN, "s", 34])             // [ 1, 2, 3, "a", "s", 34 ]
3:双位运算符

双否定位操作符的优势在于它执行相同的操作运行速度更快

Math.floor(4.9) === 4简写为 ~~4.9 === 4

注意:对于负数来说结果不同

ps: 还可以用 4.9 | 0 === 4

4:判断奇偶数

num & 1 //奇数返回,偶数返回0

5:精确到指定位数的小数2
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`)
round(1.245, 2) //1.25
6:程序中所有的等于判断都要用===,除了obj.c == null这种情况

obj.c == null 等价于obj.c === undefined/null

7:变量前加两个感叹号,判断变量的值

如果值为真,首先可以排除undefined和null,根据对象类型,可以做出如下判断

数值类型:表示不是0,并且有确定含义的值(包括无穷大)

数组,对象,函数:只能表示不是undefined或null,并不能判断是否有元素和内容。

var a = undefined/null !!a === false
var b = 0   !!b === false
var c = ""  !!c === false
//  其他都为true

var d = []/{} !!d === true

作为条件表达式,不需要使用!!进行转换,JS会自动转换,!!就只将类型转换为Boolean值

if (!!value) {}  // 等价与下面
if (value) {}
原始类型和引用类型比较
1:String和Number比较,会先将String转换成Number类型
123 == "123"  //true
"" == 0  //true
2:null和undefined比较结果是true,除此之外,null、undefined和其他任何结果值的比较值都为false
null == undefined //true
null == "" //false
null == 0 //fasle
null == false //false
undefined == "" //false
undefined == 0 //false
undefined == false //false
3:当原始类型和引用类型做比较时,对象类型会依照Toprimitive规则转换为原始类型
"[object Object] == {}" //true
"1,2,3" == [1, 2, 3] //true
[] == ![] //true

关于第三个:!的优先级高于==,![]首先会被转换成false,然后根据上面第三点,false转换成Number类型0,左侧[]转化成为0,两侧比较相等。

4:如何让:a==1 && a==2 && a==3
根据拆箱转换,以及==的隐式转换,可以如下写:

const a = {
   value:[3,2,1],
   valueOf: () => {return this.value.pop(); },
} 
5:为什么0.1+0.2 !=0.3
计算机中所有的数据都是以二进制存储的,所以在计算机计算时要把数据先转换成二进制进行计算,然后把计算结果转换成十进制。

会存在精度丢失问题

0.10.2的二进制都是以1100无线循环的小数

0.1的二进制:
0.0001100110011001100110011001100110011001100110011001101

0.的二进制:
0.001100110011001100110011001100110011001100110011001101

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104815.html

相关文章

  • 深入理解js

    摘要:详解十大常用设计模式力荐深度好文深入理解大设计模式收集各种疑难杂症的问题集锦关于,工作和学习过程中遇到过许多问题,也解答过许多别人的问题。介绍了的内存管理。 延迟加载 (Lazyload) 三种实现方式 延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。本文详细介绍了三种延迟加载的实现方式。 详解 Javascript十大常用设计模式 力荐~ ...

    caikeal 评论0 收藏0
  • 前端识点整理

    摘要:难怪超过三分之一的开发人员工作需要一些知识。但是随着行业的饱和,初中级前端就业形势不容乐观。整个系列的文章大概有篇左右,从我是如何成为一个前端工程师,到各种前端框架的知识。 为什么 call 比 apply 快? 这是一个非常有意思的问题。 作者会在参数为3个(包含3)以内时,优先使用 call 方法进行事件的处理。而当参数过多(多余3个)时,才考虑使用 apply 方法。 这个的原因...

    Lowky 评论0 收藏0
  • 前端识点整理

    摘要:难怪超过三分之一的开发人员工作需要一些知识。但是随着行业的饱和,初中级前端就业形势不容乐观。整个系列的文章大概有篇左右,从我是如何成为一个前端工程师,到各种前端框架的知识。 为什么 call 比 apply 快? 这是一个非常有意思的问题。 作者会在参数为3个(包含3)以内时,优先使用 call 方法进行事件的处理。而当参数过多(多余3个)时,才考虑使用 apply 方法。 这个的原因...

    snowLu 评论0 收藏0
  • 写一本关于 React.js 小书

    摘要:因为工作中一直在使用,也一直以来想总结一下自己关于的一些知识经验。于是把一些想法慢慢整理书写下来,做成一本开源免费专业简单的入门级别的小书,提供给社区。本书的后续可能会做成视频版本,敬请期待。本作品采用署名禁止演绎国际许可协议进行许可 React.js 小书 本文作者:胡子大哈本文原文:React.js 小书 转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huzi...

    Scorpion 评论0 收藏0
  • 前端基础

    摘要:谈起闭包,它可是两个核心技术之一异步基于打造前端持续集成开发环境本文将以一个标准的项目为例,完全抛弃传统的前端项目开发部署方式,基于容器技术打造一个精简的前端持续集成的开发环境。 这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日...

    graf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<