JavaScript 数据类型

3.4 数据类型

  1. Undefined
  2. Null
  3. Boolean
  4. Number
  5. String
  6. Object
    原始类型存值 对象类型存地址
    理解:
const a = []
const b = a
b.push(1)
console.log(a)  // [1]

假设const a = [ ]在内存地址#001存了"[ ]"
而const b = a代表的是b复制了a存的地址#001 而改变b的值相当于改变这个地址的值即#001的值"[ ]"

在这里插入图片描述

3.4.1 typeof 操作符
ECMAScript 为松散类型(即var),用typeof可以检测数据类型。

var message = "some string";
alert(typeof message);  	//"string"
alert(typeof 100);			//"number" 

1.Undefined
未经初始化的变量值就为Undefined

var message;					//"undefined"
alert(message == undefined);	//true

对未初始化和未声明的变量使用typeof操作符都返回undefined。

2.Null
Null是一个空对象指针

var car = null;
alert(typeof car);			//"object"
alert(null == undefined);	//"true"

typeof null === "object"原因补充:
因为JS最初版本使用得是32位系统,出于性能考虑使用了低位来存储变量得类型信息
而000开头的二进制代表为对象,由于null的二进制表示为全0,因此才被解析为对象

3.Boolean
布尔类型区分大小写:大写的True与False只是标识符,需要用true和false
转型函数Boolean();

var message = "Hello world!";
var messageAsBoolean = Boolean(message);		//true
Boolean(0); 									//false
Boolean(NaN);								//false
Boolean(null);								//false
Boolean(undefined);							//false
Boolean("");									//false

4.Number
十进制:20;
八进制:024;
十六进制:0x15;
科学计数法:e前面的数值乘以10的e后面数值的幂。
3.123e4 ==31230。 ** **
3e-5 == 0.00003。
保存浮点数需要内存为整数的两倍;因此当小数点后没有数或为0时,ES规则会自动转换为整数节约内存。

注:0.1+0.2 != 0.3 0.15+0.25 == 0.4
1.ES中最小数值Number.MIN_VALUE5e-327;
最大数值Number.MAX_VALUE
1.7976931348623157e+308;
若超出则正数转换为正无穷反之负无穷。

2.NaN :非数值 (Not a Number)
用于表示一个要返回数值的操作数未返回的情况。
1.任何数值除以NaN会返回NaN。
2.任何涉及NaN的操作都会返回NaN。
3.NaN != NaN。

3.isNaN(x):x为任一参数,此函数可以确认x是否 ”不为数值“
此函数的过程为:先调用valueOf()来确定是否可以装换为数值,若不能则基于此返回值再调用toString()方法再测试返回值。
1.任何不能被转换为数值的值会返回true
eg: isNaN(NaN),isNaN(“blue”)
2.能被转换为数值的值会返回false
eg: isNaN(10),isNaN(“10”),isNaN(true)

4.数值转换
有3个函数可把非数值转换为数值:1.Number() 2.parseInt() 3.parseFloat
3个函数对于同样的输入会返回不同的结果。
1.Number()可以转换任意数据类型,但转换字符串时较为复杂,规则较多,推荐用后两种方式。

var num1 = Number("hello world!");		//NaN
var num2 = Number(true);				//1
var num3 = Number("00001012");		//1012
var num4 = Number("");				//0
var num5 = Number("0xf");				//15

2.parseInt() ,parseFloat()
1.paserInt()会忽略字符串前的空格,直至找到第一个非空格字符,若第一个字符不是数字或符号则返回NaN
即对空字符返回NaN,而Number()返回0

var num1 = parseInt("1234blue");		//1234
var num2 = parseInt("");				//NaN
var num3 = parseInt("0xA");				//10
var num4 = parseInt(22.5);				//22

注: parseInt()在ES3与ES5中对八进制解析有分歧
parseInt(“070”) 在ES3中为56 而在ES5中为70
因为在ES5中无法解析八进制因此前导的0无效
使用双参数可以选定转换的形式:parseInt(“070”,8),则在ES3与ES5中都为56

2.parseFloat()可以转换带一个小数点的数值且会忽略前导的0,因此转换16进制时会返回0
其他功能与parseInt()类似

5.String
在ES中双引号和单引号都可表示字符串
一些字面量含义:
\n 换行
\t 制表
\b 退格
\r 回车
\f 进纸
’ 单引号字符串中表示单引号
" 双引号字符串中表示双引号
在字符串中加入转义序列被视为一个字符

ES中字符串的特点:不可变。

var lang = "java";
lang = lang + "script"; 		//javascript

在这个过程中是先创建一个能容纳10字符的字符串,然后再这个字符串中填充"java"和"script”,最后一步是销毁原来字符串"java"和"script"。这也是老浏览器拼接字符串慢的原因。

toString()方法:

var age = 11;
var ageAsString = age.toString();			//"11"
var found = true;
var foundAsString = found.toString();			//"true"

数值,布尔值,对象,字符串都有toString()方法(字符串返回它的一个副本),而null和undefined没有此方法
调用时一般不加参数,里面加的参数为要转换成的进制。

String()方法:
能将任意类型数据转换为字符串,其过程为:若值有toString()方法则调用并返回,若为null则返回null,undefined返回undefined

6.Object
<1>
var a = new Object();

对象实例属性及方法:
1.constructor:保存用于创建当前对象的函数,在1中构造函数就是Object().
2.hasOwnProperty(propertyName):检查给定属性在当前对象实例中是否存在。(propertyName)中参数为字符串.
3.isPrototypeOf(object):检查传入对象是否为当前对象原型.
4.toLoacalString():返回对象的字符串形式.<与执行环境对应>.
5.toString():返回对象的字符串形式.
6.valueOf():返回对象的字符串,数值,布尔值表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值