JS中 isNaN() 方法解析

1. isNaN() 存在的意义

由于 NaN 是唯一一个不等于自身的值,不像其他的值,可以用相等操作符来判断是否等于自身,NaN == NaNNaN === NaN都会返回false,所以isNaN()就诞生了,那它到底起着怎样的作用呢,且看下文。

2. isNaN() 判断的原理

isNaN函数接受一个参数,原理是先尝试将参数转换为数值型,调用的是Number()方法,再进行判断。

说到这里就有必要介绍一下Number()方法了,其实Number()方法的原理也有点复杂,具体分两种情况。
Number()方法也接受一个参数:
一、 参数为原始数据类型
原始数据类型有:数值、字符串、布尔值、undefined、null
先对参数调用valueOf方法,再用Number()方法进行判断

    //1. 数值:自然转为数值

    //2. 字符串
    Number('123') // 123
    Number('123abc') // NaN
    Number(' ') // 0

    // 3. 布尔值
    Number(true) // 1
    Number(false) // 0

    // 4. undefined
    Number(undefined) // NaN

    //5. null
    Number(null) // 0

二、参数为对象
先对参数调用valueOf方法,再对参数调用toString()方法,最后用Number()方法进行判断。
参数为对象时返回的是NaN,除非参数是包含单个数值的数组(数组也是对象)

    Number({a:1}) // NaN
    Number([1, 2, 3]) //    NaN
    Number([1]) // 1

介绍完Number()方法的原理之后,就可以很好地知道isNaN()判断的结果了。

3. 什么时候返回 true ,什么时候返回 false

返回 true: NaN、对象(除包含单个数值的数组)、undefined、不能用Number()方法转为数值型的字符串

返回false: 数值、null、布尔值、能用Number()方法转为数值型的字符串、包含单个数值的数组

4. isNaN() 的作用

根据isNaN()方法返回的是true还是false可以检测参数是否可以像number那样是可运算的,如果是不可运算的,则可赋予这个参数一个默认的值或者是其他合适的内容,就可以得到一个隐式转换参数数值的函数。

原文地址:https://www.cnblogs.com/moqijianqi/p/11413441.html

时间: 2024-10-28 22:58:12

JS中 isNaN() 方法解析的相关文章

js中Date 方法

Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash 播放器正运行的操作系统的时间和日期.要使用Date对象的方法,你就必须先创建一个Date对象的实体(Instance). Date 对象必须使用 Flash 5 或以后版本的播放器. Date 对象的方法并不是静态的,但是在使用时却可以应用于所指定的单独实体. Date 对象的方法简介: ·getDate | 根据本地时

关于JS中的方法是否加括号的问题

js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } function getE(fun,e){ fun(e); } getE(fun,3);//弹出3,这里把函数fun当成实参传入,所以就不用加括号了. 2.函数调用的时候是要加括号的,上面这个例子中getE这个函数调用的时候,不管有没有参数,都是要加括号的. 3.函数作为赋值符号右边的时候,无括号表示的是传递

【转载】JS中bind方法与函数柯里化

原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情况戳这里ECMAScript 5 compatibility table),权威指南上提到在ES3中利用apply模拟该方法的实现(JS权威指南中函数那章), 但无法真实还原该方法, 这也是真bind方法中的有趣特性. (原文这边理解有问题, 这段话的意思如果结合犀牛书上下文的意思, 再结合犀牛书中

Android Measure中对应方法解析

注:根据网上资料整理如下 首先 onMeasure方法是为了得到各个View大小的函数 fill_parent-->public static final int EXACTLY = 1 << MODE_SHIFT; wrap_content-->public static final int AT_MOST = 2 << MODE_SHIFT; 这是makeMeasureSpec方法的代码片段 public static int makeMeasureSpec(int

JS中生成与解析JSON

js中生成json对象 js中解析json字符串: 1.eval("..."): var a_id=eval('{"name":123}'); 如果eval中的内容含有恶意脚本就麻烦了 2.json_parse: 需要导入json_parse.js: <script src="js/json_parse.js"></script>    <script language="javascript"&

JS中onload方法,JQ中的load,ready方法

JS中的 onload 属性:网页中所有的内容加载完毕后(包括图片)才能执行: 页面中只能有一个onload window.onload = function() { …… }; JQ的 ready() 属性:网页中所有DOM结构绘制完毕后就执行,可能DOM元素关联的东西并没有加载完(例如图片): 页面中可以写用多个 $(document).ready(function() { …… }); 简写:$(function(){……}) JQ的 load() 属性:这个方法会等到页面所有内容加载完毕

js中call方法的使用介绍

js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明 call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对

js中extends方法

一.jQuery extend方法介绍 jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部代码实现的是相同的,只是功能却不太一样: 且看官方给出解释: jQuery.extend(): Merge the contents of two or more objects together into the first object.(把两个或者更多的对象合并到第一个当中): jQuery.fn.extend():Merge t

JS中的prototype解析

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name){  this.name=name;  //对象方法  this.Introduce=functi