其他引用数据类型
Date
Date是一个构造函数-->new Date()
用来处理日期和时间。基于世界标准时间(格林威治时间--1970年1月1日)。
月份(0 ~ 11),周日到周六(0 ~ 6),时间(基于格林威治时间+8)。
关于Date具体属性和方法可查阅MDN文档。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/now
Math
Math是一个对象,不是构造函数,所以没有new Math()的调用形式,关于Math的具体属性和方法可查阅MDN文档。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math
Global(全局对象)
Global对象的属性和方法(称为全局的对象)全部挂载在windows对象上面,所以可以通过window.的形式来访问Global对象的属性和方法。
标准内置对象也就是全局的对象,详细分类查阅MDN:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
包装类(String,Number,Boolean)
什么是包装类?
将基本数据类型转为对应的引用数据类型(只有String,Number,Boolean有对应的包装类),创建的引用数据类型也就是包装类的实例对象(组包),实例对象引用完对应的属性或方法后,就销毁此实例对象(拆包)。
var test = 2;
var app = test.toString(); //既经历了组包又经历了拆包
console.log( typeof(app)); //返回值:string
解析test原本是基本数据类型,怎么会调用toString方法。
(因为test被组包转换为一个对象,所以可以调用方法)。
下面将test组包通过显示组包和显示拆包来解析:
--组包:new 包装类(对包装类构造调用),就可以组包,称为显示组包。如上例组包:test = new String(需转换的基本数据类型);
--拆包:对象.valueof(),就可以拆包,称为显示拆包。如上例拆包:
test = test.vauleof();
显示强制类型转换
在JavaScript中,强制类型转换一般是引用数据类型转为基本数据类型,所以组包不能算作强制类型转换。
ToString()
非字符串转为字符串。(实现toString规则的是String构造函数,对String函数进行普通调用。)
1).基本数据类型------>字符串
规则:
基本类型值的字符串化规则为:
null 转换为 "null"
undefined 转换为 "undefined"
true 转换为 "true" ; false转换为"false"
数字的字符串化则遵循通用规则
1 转换为 "1" (当然可能会有指数的形式 1.07e21)
eg:
String(null); //返回值"null"
2).引用数据类型------>字符串
规则:
不同类型对象的valueOf()方法的返回值
对象 返回值
Boolean 布尔值。
Number 数字值。
String 字符串值。
Array 返回数组对象本身。
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function 函数本身。
Object 对象本身。这是默认情况。
Math 和 Error 对象没有 valueOf 方法
<1>先调用toString()方法
--如果返回值是基本数据类型,那么使用基本数据类型转字符串的规则(如上)
--如果返回值不是基本数据类型,那么调用valueof()方法
<2>调用toString()方法
(注意:是待转换的引用数据类型的valueof方法,不是toString返回值的valueof方法)
--如果返回值是基本数据类型,那么使用基本数据类型转字符串的规则
--如果返回值不是基本数据类型,那么报错
ToNumber()(还可以使用+进行Number的转换)
非数字转为数字。实现ToNumber规则的是对Number函数构造调用。
1).基本数据类型------>数字
规则:
基本类型值的数字化规则为
Null==>0 ; undefined==>NaN
Boolean:true==>1 false==>0
字符串
就是把字符串两边的空白字符去掉,然后把两边的引号去掉,
看它能否组成一个合法的数字。
如果是,转化结果就是这个数字;否则,结果是NaN。
当然也有例外,比如空白字符串转化为数字的结果是0。
2)引用数据类型------>数字
<1>先调用valueof()方法
--如果返回值是基本数据类型,那么使用基本数据类型转字符串的规则
--如果返回值不是基本数据类型,那么调用toString()方法
<2>调用toString()方法
--如果返回值是基本数据类型,那么使用基本数据类型转字符串的规则(如上)
--如果返回值不是基本数据类型,那么报错
ToBoolean()(!!操作也可以实现ToBoolean的功能)
非布尔转为布尔。实现ToBoolean规则的是对Boolean函数进行普通调用。
假值:undefined,null,+0,-0,NaN," "
真值:除假值以外的都是真值
ToPrimitive
与ToNumber的转换规则相同,如果都找不到,则返回一个TypeError 的错误
隐式强制类型转换
规则:
将符号两边的数据类型统一向数字基本类型转(ToNumber()方法)
eg:
[] == false //返回值:true ([]-->0 false-->0)
[] + {} //返回值:[object Object] ([]-->0 {}-->[object Object](ToString方法的返回值))
{} + [] //返回值:0 ({}代码块,直接忽略 剩余:+[](+:数字的强制类型转换)-->0)
console.log({} + []); //返回值:[object Object] ([]-->0 {}-->[object Object]
判断+是字符串拼接还是加号
<1>如果一边是字符串,则作拼接,否则作加法
<2>如果遇到对象,先将对象转为基本数据类型(ToPrimitive()方法)
短路或(||),短路与(&&)
console.log("aaa")?console.log("aaa"):console.log("bbb");
//返回值:aaa bbb
//整个表达式的返回值:undefined
编码规范:一般在|| &&两边写条件判断表达式
==操作符
==(两边数据类型不一致时统一转为数字类型,数据类型一致作值的比较)
规则:
有:String,Number,Boolean,Object
无:Undefined,Null
<1>有跟无--->false
<2>无跟无--->true
<3>有跟有--->统一向数字转
<4>NaN不等于NaN
网友评论