前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >原 NaN和Infinity,null和u

原 NaN和Infinity,null和u

作者头像
jojo
发布于 2018-05-03 07:13:30
发布于 2018-05-03 07:13:30
1.1K00
代码可运行
举报
文章被收录于专栏:jojo的技术小屋jojo的技术小屋
运行总次数:0
代码可运行

作者:汪娇娇

日期:2016.10.10

看到这个标题,大家对这4个变量应该都不陌生,但若说起他们的差别或者是举个小栗子判断结果,估计就有点晕乎乎的了。

1、NaN和Infinity

那先来说说JavaScript的数据类型,有Number、字符串、布尔值、对象等等,而NaN和Infinity就属于Number类型。先说说它俩的差别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

举个栗子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2 / 0; // Infinity
0 / 0; // NaN

并且NaN有个特例,我们都知道相等运算符有两种:== 和 ===。

== 比较,它会自动转换数据类型再比较;

=== 比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

但NaN却和所有的值都不相等,包括它自己:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NaN===NaN;  //false;

唯一能判断NaN的方法是通过IsNaN()函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
isNaN(NaN); // true

2、null和undefined

null和undefined恰好都是JavaScript的数据类型。

在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。

(1)null表示"没有对象",即该处不应该有值。典型用法是:

        a、作为函数的参数,表示该函数的参数不是对象。

        b、作为对象原型链的终点。

举个栗子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Object.getPrototypeOf(Object.prototype) // null

(2)undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

        a、变量被声明了,但没有赋值时,就等于undefined。

        b、调用函数时,应该提供的参数没有提供,该参数等于undefined。

        c、对象没有赋值的属性,该属性的值为undefined。

        d、函数没有返回值时,默认返回undefined。

举个栗子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var i; i // undefined 
function f(x){console.log(x)} f() // undefined
var o = new Object(); o.p // undefined 
var x = f(); x // undefined

事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null,undefined仅仅在判断函数参数是否传递的情况下有用。

举个栗子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function add(a,b){
	var c=a+b;
	console.log(a+","+b+","+c);
}
add(1,2);//结果是1,2,3
add(1,null);//结果是1,null,1
add(1);//结果是1,undefined,NaN
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
14 条评论
热度
最新
请问下: getNum(5);//随机生成五位的码,当做账号名 这里的getNum里面是什么逻辑呢?
请问下: getNum(5);//随机生成五位的码,当做账号名 这里的getNum里面是什么逻辑呢?
11点赞举报
没有什么逻辑,你可以理解为给用户的令牌一个标识(名称),比如:令牌1、令牌2、软件名等等,只是让用户能够区分不同的令牌
没有什么逻辑,你可以理解为给用户的令牌一个标识(名称),比如:令牌1、令牌2、软件名等等,只是让用户能够区分不同的令牌
回复回复点赞举报
兄弟那个 TOTP 类,你没贴。TOTP.generateTOTP(hexKey, hexTime, "6", CRYPTO); 这里会报错,能贴出来吗
兄弟那个 TOTP 类,你没贴。TOTP.generateTOTP(hexKey, hexTime, "6", CRYPTO); 这里会报错,能贴出来吗
22点赞举报
好的 等下
好的 等下
回复回复点赞举报
文章还在审核,你可以先加我微信hk_031300,我发代码给你
文章还在审核,你可以先加我微信hk_031300,我发代码给你
回复回复点赞举报
生成的二维码,使用谷歌认证扫描后,服务端怎么知道已经扫描(绑定)?因为服务端需要记录用户是否绑定谷歌认证,下次就不用绑定了
生成的二维码,使用谷歌认证扫描后,服务端怎么知道已经扫描(绑定)?因为服务端需要记录用户是否绑定谷歌认证,下次就不用绑定了
77点赞举报
很简单,使用谷歌认证扫描后,谷歌认证器中会出现验证码,下一步就是让用户和谷歌密钥绑定在一起 一般前端页面流程是:用户扫描生成的二维码后,点击下一步进行绑定,这个时候用户需要输入 `谷歌认证器中对应的验证码`,同时前端需要把对应的密钥回传过去,你可以在本文全局查找一下“googleSave”和“getCode”这两个方法,流程已经有了
很简单,使用谷歌认证扫描后,谷歌认证器中会出现验证码,下一步就是让用户和谷歌密钥绑定在一起 一般前端页面流程是:用户扫描生成的二维码后,点击下一步进行绑定,这个时候用户需要输入 `谷歌认证器中对应的验证码`,同时前端需要把对应的密钥回传过去,你可以在本文全局查找一下“googleSave”和“getCode”这两个方法,流程已经有了
回复回复点赞举报
一般来说,用户表会有两个字段,分别为 `google_str` == '用户谷歌密钥'==没有绑定就为空 `google_status`=='用户谷歌验证状态 0-无 1-有',
一般来说,用户表会有两个字段,分别为 `google_str` == '用户谷歌密钥'==没有绑定就为空 `google_status`=='用户谷歌验证状态 0-无 1-有',
回复回复点赞举报
查看全部7条回复
绝拉
绝拉
回复回复点赞举报
推荐阅读
两步验证杀手锏:Java 接入 Google 身份验证器实战
大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的。
Java技术栈
2018/09/29
5.3K0
为 Linux 服务器 SSH 添加 TOTP 动态验证码以及 Java 实现算法
TOTP 基于时间的一次性密码算法(Time-Based One-Time Password)是一种根据预共享的密钥与当前时间计算一次性密码的算法,利用不同设备时间相同的特性,将时间作为特定算法的一部分从而达到无需网络进行安全验证的目的。 该算法有两个输入,一个输出,一个输入是随机生成的密钥,密钥需要被验证方和验证器同时持有,另一个输入即系统时间,通常是 UNIX 时,输出则是两方相同的验证码。一般的验证码有效期为 30 秒,每 30
寒冰hanbings
2021/12/21
1.9K0
为 Linux 服务器 SSH 添加 TOTP 动态验证码以及 Java 实现算法
动态令牌_创建安全令牌
HMAC-based One-Time Password 简写,表示基于 HMAC 算法加密的一次性密码。是事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。
全栈程序员站长
2022/11/17
1.6K0
动态令牌_创建安全令牌
如何选择合适的用户身份验证方法
选择合适的用户身份验证方法需要考虑多个因素,包括安全性、用户体验、应用场景和技术实现等。以下是一些常见的用户身份验证方法,以及选择时需要考虑的关键因素:
华科云商小徐
2024/07/12
2560
使用aerogear生成totp
aerogear-otp-java-1.0.0-sources.jar!/org/jboss/aerogear/security/otp/Totp.java
code4it
2018/09/17
1.8K0
加密与安全_深入了解Hmac算法(消息认证码)
这个salt可以看作是一个额外的“认证码”,同样的输入,不同的认证码,会产生不同的输出。因此,要验证输出的哈希,必须同时提供“认证码”。
小小工匠
2024/05/26
1.1K0
JAVA与PHP之间进行aes加密解密
用户数据应经过加密再传输,此文档为aes128加密(cbc模式)的说明 摘要算法为SHA-512
BUG弄潮儿
2022/06/30
2.7K0
Java中4大基本加密算法解析
简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 1. BASE64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码可用于在HTTP
我是攻城师
2018/05/11
1.9K0
Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中
二十三年蝉
2018/08/01
5.1K0
Java加密与解密之消息摘要算法
消息摘要算法又称为散列算法,其核心在于散列函数的单向性。即通过散列函数可获得对应的散列值,但不可通过该散列值反推其原始信息。这是消息摘要算法的安全性的根本所在。消息摘要算法主要分为三大类:MD(MessageDigest,消息摘要算法)、SHA(Secure HashAlgorithm,安全散列算法)和MAC(MessageAuthentication Code,消息认证码算法)。MD5、SHA和HMAC分别是三大类消息摘要算法中的代表。
布禾
2020/11/24
8970
Java加密与解密之消息摘要算法
谷歌authenticator接入与使用
一、authenticator解决了什么问题二、authenticator的原理三、springboot集成authenticator四、做成可复用starter五、参考
叔牙
2023/08/09
6.3K1
谷歌authenticator接入与使用
使用越来越广泛的2FA双因素认证,缘何越发受到推崇?
随着互联网在生活方方面面的应用,日常少不了要登录各个网站或者应用、或者是银行转账等需要验证自己身份的场景。从早期的输入账号密码来登录,到后来普遍开始通过手机验证码进行登录、或者APP扫码进行登录,身份校验的操作方式经历了一轮又一轮的迭代演进。
是Vzn呀
2024/11/22
2161
Java整合Google身份验证器:详解及实战应用
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/12/29
3322
Java整合Google身份验证器:详解及实战应用
动态令牌之 OTP,HOTP,TOTP 的基本原理 Python
OTP 是 One-Time Password的简写,标识一次性密码HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性密码。是事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过HASH算法运算出一致的密码。(基于事件)TOTP 是Time-based One-Time Password的简写,表示基于时间戳算法的一次性密码。是时间同步,基于客户端的动态口令和动态口令验证服务器的时间比对,一般每60秒产生一个新口令,要求客户端和服务器能够十分精确的保持正确的时钟,客户端和服务端基于时间计算的动态口令才能一致。
用户7886150
2020/12/30
2.5K0
区块链基础:非对称算法
1.Hash算法 package cn.hadron.security; import java.security.MessageDigest; import java.util.UUID; import org.eclipse.jetty.util.security.Credential.MD5; /** * crypto['krɪptoʊ]秘密成员, * 一些语言的crypto模块的目的是为了提供通用的加密和哈希算法 * 加密工具类 */ public class CryptoUtil
程裕强
2022/05/06
3870
区块链基础:非对称算法
哈希算法是对称算法还是非对称算法_对称加密和非对称加密原理
作用:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。 哈希算法的目的:为了验证原始数据是否被篡改。 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出; 不同的输入大概率得到不同的输出。
全栈程序员站长
2022/11/01
1.2K0
身份验证器是如何验证我们的身份?
​ 我以为我最初遇见他是在宝塔面板上,因为他可以方便的帮助我们进行身份验证。其实我们早就相遇在QQ安全中心手机版的口令里面(此处不确定是否是使用同一种算法,不过原理类似)。当初遇见他,我并不知道他是离线的。我以为谷歌身份验证器肯定是绑定谷歌账号的。后来找了半天,原来他只是个离线的软件。相信有很多同学和我一样的想法:离线身份验证器如何能使我们登录在线的场景?
yumusb
2020/08/28
4.3K0
基于python+PyQt5的Google身份验证器
1.本文学习nanhuier的博客《Python计算谷歌身份验证器的验证码》并优化其中代码。 原博客链接:https://blog.csdn.net/nanhuier/article/details/77679200 2.本文学习莫水千流的博客《程序员之路:python3+PyQt5+pycharm桌面GUI开发》, 成功搭建PyQt5+Pycharm的开发环境,建议读者先按照此文配置好环境。 原博客链接:https://www.cnblogs.com/zhoug2020/p/9039993.html 3.本文学习maicss的github工程《PyQt5-Chinese-tutorial》 github链接:https://github.com/maicss/PyQt5-Chinese-tutorial 4.本文学习晴空行的博客《Python打包方法》, 原博客链接:https://www.cnblogs.com/gopythoner/p/6337543.html
潇洒坤
2019/03/06
1.4K0
CKafka系列学习文章 - 用java实现API调用(十一)
导语:上一章节我们了解了怎么手动拼接请求URL和用API2.0签名自动生成请求URL,来调用CKafka的接口,这一章将进入开发阶段,用java实现拼接请求URL,进行API调用。
发哥说消息队列
2019/09/06
6640
Java中的加密与安全,你了解多少
  什么是数据安全?假如Bob要给Alice发送一封邮件,在发送邮件的过程中,黑客可能会窃取到邮件的内容,所以我们需要防窃听;黑客也有可能会篡改邮件的内容,所以Alice必须要有能有去识别邮件是否被篡改;最后,黑客也可能假冒Bob给Alice发送邮件,所以Alice还必须有能力识别出伪造的邮件。所以数据安全的几个要点就是:防窃听、防篡改和防伪造。 古代的加密方式:
程序员波特
2024/01/19
2370
Java中的加密与安全,你了解多少
推荐阅读
相关推荐
两步验证杀手锏:Java 接入 Google 身份验证器实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档