js数据类型详解

js的数据类型分为两种,原始类型(基本数据类型)和引用数据类型, js 变量能够保存多种数据类型

基本数据类型包括: null, undefined, number, boolean, string
引用类型包括object,比如:object, array, function, Date,RegExp…

下面让我们详细了解一下
1.undefined
在js中,没有值的变量,其值是undefined, typeof也返回undefined
例如:
var a; //值是undefined,类型是undefined
2. null类型null是js保留的关键字,null类型也只有一个null值,表示为空或者不存在的对象引用,即空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值,这样一来,只要直接检查null值就可以知道相应的变量是否保存了一个对象的引用,实际上,undefined值是派生null值,因此ECMA-262规定他们的相等性检测要返回true
null == undefined // true

null和undefined的区别
null表示没有对象,即该处不应该有值,典型用法是
(1)作为函数的参数,表示该函数的参数不是对象
(2)作为对象原型链的终点
object.getPrototypeof(object.prototype)

undefined表示缺少值,就是此处应该用一个值,但是还没有定义,典型用法是
(1)变量被声明了,但是还没有被赋值,就是undefined
(2)调用函数时,应该提供的参数没有提供,该参数就等于undefined
(3)对象没有赋值的属性,该属性的值为undefined
(4)函数没有返回值时,默认为undefined

	var a //a undefined
	function f (b) {
		console.log(b)
	}
	f()  //undefined
	var c = new Object();
	c.d  //undefined
	
	var e = f();
	e()//undefined

js中的if判断语句无论是null类型还是undefined类型他们的返回值都是false,也就是说一个变量若是null或者是undefined那么他就是false
if (null) {
alert(“sdf”);//进入不了
}
if (undefined) {
alert(“sdfsdf”);//进入不了
}
var a=12;
if (a) {
alert(“sdf”); //能进入
}

boolean
boolean值有两个字面值,true 和false,这两个值和数字值不是一回事,true不一定等于1,而false也不一定等于0
js中存在的Truthy和Falsy值的概念,除了boolean值的true,false外,所有类型的js值均可用于逻辑判断,其规则如下

所有Falsy值,当进行逻辑判断时均为false, Falsy值包括 false, undefined, null , 正负0, NaN, “”
其余的所有值都为Truthy,当进行逻辑判断时均为true,值得注意的是,infinity,空数组,“0”都是Truthy 值

数据类型转为true的值转为false的值
booleantruefalse
number任何非零的字符串(包括无限循环)0和NaN
string任何非空字符串“”空字符串
object任何对象null
undefinedundefined

Number
最基本的数值字面量格式是十进制整数,十进制整数可以直接输入
整数可以通过八进制或十六进制的字面量来表示
其中八进制字面值的第一位必须是0,然后是八进制数字序列(0-7),例如:0366,如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析
八进制字面量在严格模式下是无效的,会导致支持该模式的js引擎抛出错误
十六进制的前两位必须是0x,后跟任何十六位进制数字其中A-F 可以大写也可以小写,例如:0x6F3d
进行算数计算时,所有以八进制和十六进制表示的数值都将被转换为十进制数值

顺便了解一下进制(百度的)
进制
进制就是进位技术制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)对于任何一种进制 — x进制,就表示每一位置上的数运算时都是逢 x进 一位,十进制是逢十进一,十六进制是逢十六进一

十进制是使用最普遍的一种,十进制编码几乎就是数值本身,十进制的计数为0,数码是由0-9组成,计数规律是逢十进一

二进制,它是由两个数码0,1组成,二进制的运算规律是逢二进一
为了区别其他进制,二进制的书写通常在数的右下方注上基数2,或后面加B表示,其中B是英文二进制Brinary的首字母,
例如:二进制 10110011可以(10110011)2, 或写成10110011B, 其中b就是binary的首字母,对于十进制可以不加标注,或者加后缀D,其中d是英文进制decimal的首字母d。 我们之所以使用二进制,是因为二进制有以下优点:
(1)二进制中只有两个数码1和0,可用具有两个不同稳定状态的元器件来表示一位数码
(2)二进制数运算简单,大大简化了计算中运算部件的结构,
二进制数的加法和乘法基本运算各有四条
0+0=0,0+1=1,1+0=1,1+1=10
0×0=0,0×1=0,1×0=0,1×1=1
3)二进制天然兼容逻辑运算。
但是,二进制计数在日常使用上有个不便之处,就是位数往往很长,读写不便,如:把十进制的100000D写成二进制就是11000011010100000B,所以计算机领域我们实际采用的是十六进制。二进制数转换为十六进制数时,长度缩减为原先的约四分之一,把十进制的100000写成八进制就是303240。十六进制的一个数位可代表二进制的四个数位。这样,十进制的100000写成十六进制就是186A0。
四进制
四进制是以4为基数的进位制,以0,1,2,和3四个数字表示任何实数,四进制与所有固定基数的基数系统有着很多共有的属性
七进制
七进制小数通常都是循环小数,除非分母是七的倍数,有些小数可以用有限个数字来表示
例如:

十进制七进制(循环部分)
1/21/2=0.3 …
1/31/3 = 0.2…

七进制的一个好处就是3.1(22/7)是圆周率的一个很好的近似值
八进制
由于二进制数据的基数r比较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制,八进制的基数R = 8 =2*3,有数码0-7,并且每个数码正好对应三位二进制数,所以八进制能很好的反映二进制,八进制用下标8或后面加O表示, 例如:二进制数据 ( 11 101 010 . 010 110 100 )2 对应八进制数据 (352.264)8或352.264O。

十二进制
十二进制,规定一打12个是一种12进制

十进制十二进制
123456789 10 11123456789 M N

有时十进制中的10/11在十二进制中也用A/B表示。
十六进制
由于二进制在使用中位数太长,不容易记忆,所以又提出了十六进制数。
十六进制有两个基本特点,它由十六个数码,数字0-9加上字母A-F组成,他们分别表示十进制数10-15,十六进制运算规则是逢十六进一,即基数R=16=2^4,通常在表示时用尾部标志H或下标16以示区别,在c语言中用添加前缀0x以表示十六进制数。
例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。
六十进制
以1/60作为单位,就正好具有这个性质。譬如︰1/2等于30个1/60,1/3等于20个1/60,1/4等于15个1/60…这种小数的进位制在表示有些数时很方便。例如常遇到的1/3,在十进位制中是一个无限小数,但在这种进位制中就是一个有限小数。

NaN
nan,非数值,即一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,这样就不会再抛出错误了,例如,其他编程语言中,任何除以非数值都会导致报错,从而停止代码执行,但是在ECMAscript中,任何数值除以非数值都会返回nan,因此不会影响其他代码的执行,如果某次计算的结果得到了一个超出javascript数值返回的值,var a = 2/-false; 那么值个数值将被自动转为特殊的infinity值,如果这个值为负数,则返回-infinity,那么该值将无法参与下次计算,
NaN本身有两个不同寻常的特点,任何涉及nan的操作都会返回nan,这个特点在多步计算中又可能导致问题,其次nan与任何值不等,包括本身

针对nan这两个特点,ecmascript定义了 isnan()函数,这个函数接受任何一个参数,参数可以是任何类型,如果是nan则返回false

数值转换
Number(),用于任何数据类型,转为数值
ParseInt(),parseFloat(),专门把字符串转为数值,这三个函数对于同样的输入会返回不同的结果
Number()函数转换规则如下

boolean true和false1, 0
null和空字符串0
undefinedNaN
字符串如果字符串中只包含数字,则将其转换为十进制数值“1”–1, “011”–11忽略前导的0
如果字符串中包含有效浮点格式,如“01.1”则转为对应的浮点数值1.1同样忽略前导0
如果字符串中包含除上述格式之外的字符则将其转换为NaN

如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转换的规则是NaN, 则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串

parseInt()用于处理整数,他会忽略字符串前面的空格,将字符串转为整数
例如:

转为正负整数NaN
第一个字符为数字,如果后面有初数字外的其他字符将自动忽略第一个字符不为数字,NaN, undefined ,’ ’

parseFloat()用于处理小数,值得注意的是,如果字符串包含的一个可以解析为整数的数,没有小数点,或者小数点以后都是0,parseFloat()会返回整数

string
string数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符

字面量含义
\n换行
\t制表
\b退格
\r回车
\f进纸
单引号
”“双引号
\xnn用十六进制nn表示的一个字符,例如\x41表示A
\unnnn用十六进制代码nnnn表示一个字符,例如,\u03a3表示希腊字符∑

这些字符字面量可以出现在字符串的任意位置
任何字符串的长度都可以访问其length属性取得,这个属性返回
把一个值转为字符串有两种格式,一种是toString();
数值,布尔值,对象和字符串都有toString()方法,但是null和 undefined没有这个方法,所以会报错
在不知道要转换的值是不是null和undefined时,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串,String()函数遵循下列转换规则,如果值有 toString()方法,则调用该方法并返回相应的结果,如果值是null,则返回null,如果值是undefined,则返回undefined
例如:
var num = true;
let a = String(num)
console.log(typeof(a))

object
对象可以通过执行 new操作符后跟要创建的对象类型的名称来创建,而创建的object类型的实例并为其添加属性和方法,就可以创建自定义对象
var obj = new Object();
仅仅创建object的实例并没有什么作用, 关键要理解一个中要的思想,在ECMAScript中,object类型是所有它的实例的基础,object类型所具有的所有属性和方法也同样存在于更具体的对象中,
object中的每个实例都具有以下属性和方法
constructor保存着用于创建当前对象的函数,对于前面的例子,构造函数就是O
bject()
hasOwnproperty(propertyName)用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在,其中作为参数的属性名必须以字符串形式指定
isPropertyof(object)用于检查传入的对象是否是当前对象的原型
propertylsEnumerable(propertyName)用于检查给定的属性是否能使用for-in 语句
toLocalString()返回对象的字符串表示,该字符串与执行环境的地区对应
toString()返回对象的字符串表示
valueOf() 返回对象的字符串,数值或者布尔值表示,通常与toString() 方法的返回值相同

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web夏目贵志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值