数据类型分析(2)

编程入门 行业动态 更新时间:2024-10-07 18:26:25

<a href=https://www.elefans.com/category/jswz/34/1768302.html style=数据类型分析(2)"/>

数据类型分析(2)

七、数据类型的详细剖析

  1. number数字类型 NaN:not a number 但是它是数字类型的 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字,返回false是有效数字

//=>语法:isNaN([value])
var num=12;
isNaN(num); //->检测num变量存储的值是否为非有效数字 false
​
isNaN('13') =>false
isNaN('珠峰') =>true
isNaN(true) =>false
isNaN(false) =>false
isNaN(null) =>false
isNaN(undefined) =>true
isNaN({age:9}) =>true
isNaN([12,23]) =>true
isNaN([12]) =>false
isNaN(/^$/) =>true
isNaN(function(){}) =>true
​
重要:isNaN检测的机制
1、首先验证当前要检测的值是否为数字类型的,如果不是,浏览器会默认的把值转换为数字类型
​把非数字类型的值转换为数字- 其它基本类型转换为数字:直接使用Number这个方法转换的
​[字符串转数字]Number('13') ->13Number('13px') ->NaN 如果当前字符串中出现任意一个非有效数字字符,结果则为NaNNumber('13.5') ->13.5 可以识别小数
​[布尔转数字]Number(true) ->1Number(false) ->0
​[其它]Number(null) ->0Number(undefined) ->NaN
​- 把引用数据类型值转换为数字:先把引用值调取toString转换为字符串,然后再把字符串调取Number转换为数字
​[对象]({}).toString() ->'[object Object]' ->NaN
​[数组][12,23].toString() ->'12,23' ->NaN[12].toString() ->'12' ->12
​[正则]/^$/.toString() ->'/^$/' ->NaN
​Number('') ->0[].toString() ->''=> isNaN([]) -> isNaN(0):false
​
2、当前检测的值已经是数字类型,是有效数字返回false,不是返回true(数字类型中只有NaN不是有效数字,其余都是有效数字)
​
  1. parseInt / parseFloat

等同于Number,也是为了把其它类型的值转换为数字类型

和Number的区别在于字符串转换分析上

Number:出现任意非有效数字字符,结果就是NaN

parseInt:把一个字符串中的整数部分解析出来,parseFloat是把一个字符串中小数(浮点数)部分解析出来

parseInt('13.5px') =>13
parseFloat('13.5px') =>13.5
​
parseInt('width:13.5px') =>NaN 从字符串最左边字符开始查找有效数字字符,并且转换为数字,但是一但遇到一个非有效数字字符,查找结束
  1. NaN的比较

NaN==NaN:false NaN和谁都不相等,包括自己

思考题:有一个变量num,存储的值不知道,我想检测它是否为一个有效数字,下面方案是否可以

if(Number(num)==NaN){alert('num不是有效数字!');
}
​
NaN和谁都不相等,条件永远不成立(即使num确实不是有效数字,转换的结果确实是NaN,但是NaN!=NaN的)
​
if(isNaN(num)){//=>检测是否为有效数字,只有这一种方案alert('num不是有效数字!')
}

布尔类型

只有两个值:true / false

如何把其它数据类型转换为布尔类型?

  • Boolean

  • !

  • !!

Boolean(1) =>true
​
!'珠峰培训' =>先把其它数据类型转换为布尔类型,然后取反
​
!!null =>去两次反,等价于没取反,也就剩下转换为布尔类型了

规律:在JS中只有“0/NaN/空字符串/null/undefined”这五个值转换为布尔类型的false,其余都转换为true


null && undefined

都代表空或者没有

  • null:空对象指针

  • undefined:未定义

null一般都是意料之中的没有(通俗理解:一般都是人为手动的先赋值为null,后面的程序中我们会再次给他赋值)

var num = null; //=>null是手动赋值,预示着后面我会把num变量的值进行修改
...
num = 12;

undefined代表的没有一般都不是人为手动控制的,大部分都是浏览器自主为空(后面可以赋值也可以不赋值)

var num; //=>此时变量的值浏览器给分配的就是undefined
...
后面可以赋值也可以不赋值

刘天瑞(BOY)的女朋友是null,他的男朋友是undefined


object对象数据类型

普通对象

  • 由大括号包裹起来的

  • 由零到多组属性名和属性值(键值对)组成

属性是用来描述当前对象特征的,属性名是当前具备这个特征,属性值是对这个特征的描述(专业语法,属性名称为键[key],属性值称为值[value],一组属性名和属性值称为一组键值对)

var obj = {name:'珠峰培训',age:9
};
//=>对象的操作:对键值对的增删改查
语法:对象.属性 / 对象[属性]
​
[获取]
obj.name 
obj['name']  一般来说,对象的属性名都是字符串格式的(属性值不固定,任何格式都可以)
​
[增/改]
JS对象中属性名是不允许重复的,是唯一的
obj.name='周啸天'; //=>原有对象中存在NAME属性,此处属于修改属性值
obj.sex='男'; //=>原有对象中不存在SEX,此处相当于给当前对象新增加一个属性SEX
obj['age']=28;
​
[删]
彻底删除:对象中不存在这个属性了
delete obj['age'];
​
假删除:并没有移除这个属性,只是让当前属性的值为空
obj.sex=null;
​
----
在获取属性值的时候,如果当前对象有这个属性名,则可以正常获取到值(哪怕是null),但是如果没有这个属性名,则获取的结果是undefined
obj['friends'] =>undefined

思考题:

var obj = {name:'珠峰培训',age:9
};
var name = 'zhufeng';
​
obj.name  =>'珠峰培训'  获取的是NAME属性的值
obj['name'] =>'珠峰培训' 获取的是NAME属性的值
obj[name] =>此处的NAME是一个变量,我们要获取的属性名不叫做NAME,是NAME存储的值'zhufeng' =>obj['zhufeng'] =>没有这个属性,属性值是undefined
​
----
'name' 和 name 的区别?=> 'name'是一个字符串值,它代表的是本身=> name是一个变量,它代表的是本身存储的这个值

一个对象中的属性名不仅仅是字符串格式的,还有可能是数字格式的

var obj = {name:'珠峰培训',0:100
};
obj[0] =>100
obj['0'] =>100
obj.0 =>Uncaught SyntaxError: Unexpected number
​
----
特殊
obj[true]=100;
obj[null]=200;
obj[undefined]=300;当我们存储的属性名不是字符串也不是数字的时候,浏览器会把这个值转换为字符串(toString),然后再进行存储
​
obj[{}]=300;  =>先把({}).toString()后的结果作为对象的属性名存储进来 obj['[object Object]']=300
​
obj[{}] =>获取的时候也是先把对象转换为字符串'[object Object]',然后获取之前存储的300
​
----
数组对象(对象由键值对组成的)
var oo = {a:12
};
var ary = [12,23]; //=>12和23都是属性值,属性名呢?
​
通过观察结果,我们发现数组对象的属性名是数字(我们把数字属性名称为当前对象的索引)
ary[0]
ary['0']
ary.0  =>报错

更多推荐

数据类型分析(2)

本文发布于:2024-02-26 01:50:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1700967.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据类型

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!