美文网首页
2018-12-17

2018-12-17

作者: 废废_siri | 来源:发表于2018-12-17 18:32 被阅读0次

其他引用数据类型

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

相关文章

网友评论

      本文标题:2018-12-17

      本文链接:https://www.haomeiwen.com/subject/kilckqtx.html