内置对象

js的内置对象

内置对的有11个,Global对象不列入内置对象。

1、Arguments         //函数参数集合        //arguments['ɑːgjʊm(ə)nts]参数/
2、Array             //数组
3、Boolean           //布尔对象
4、Date              //日期时间对象
5、Error             //异常对象
6、Function          //函数构造器
7、Math              //数学对象
8、Number            //数组对象
9、Object            //基础对象
10、RegExp           //正则表达式对象
11、String           //字符串对象
12、Global           // 全局对象     //windou对象已经把global对象的方法实现了

js的数据类型

问:js中数据类型有哪些?

  1. string
  2. number
  3. undefined
  4. boolean
  5. null
  6. object

1.string

2.number

3.undefined

注意:undefined派生于null,因此在使用“==”进行比较时会返回true
出现undefined有两种原因
1.访问对象不存在的属性或方法
2.声明了变量但从未赋值

4.null

1.出现null值多数为显式的指定一个变量为null
2.声明空对象时应将其值赋值为null
3.使用typeof 时返回object

5.boolean

使用Boolean()方法强制转换时有效
true:   1.任何非空字符串
        2.任何非零数值
        3.任何非空对象
        4.[]

特殊记忆:如下情况只能对使用Boolean()方法强制转换时有效
false:  1.空字符串
        2.0
        3.NaN
        4.null
        5.undefined

6.object

数据类型的判断(基本/引用)

{
    let s = "12";
    let num = 112;
    let b = true;
    let o = {a : 1, b : 2};
    let fun = function () {
    }

    console.log(typeof s);              //string
    console.log(typeof num);            //number
    console.log(typeof b);              //boolean
    console.log(typeof o);              //object
    console.log(typeof fun);            //function
    console.log(typeof null);           //object
    console.log(typeof undefined);      //undefined

}

强制转换和隐式转换的结果有所不同

强制转换为boolean类型时,只有非空字符串、非零数值、非空对象、

var b = Boolean([]);    //true      //强制转换为true
[] == true;             //false     //隐式转换为false
![] == true;            //false     //强制转换为true,!true=false, false==true ->false

隐式转换

当两种不同类型的数据进行值的比较时,会出现隐式转换(null、undefied、NaN不参与隐式转换)

隐式转换的转换规则时:

object : 对象—>字符串—>数值

string : 数值

boolean : 数值

内置对象_第1张图片
转换.png

不同类型的值间的运算

1.任何类型和字符串运算,最终的结果都是字符串

2.数字类型的值和undefined运算,都是NaN

3.字符串的前面添加加号时,会将字符串转换为数字,如果字符串不是数字字符串,将输出NaN

4.基础类型间的运算,会先将基础类型转换为number,再转换为string(前提是需要有string类型参与运算时才会最终转换为string类型)

5.对象类型的转换,先调用valueOf()方法将自身数据转换为基础类型,如果得到的不是基础类型再调用toString()方法

6.Date对象 转换为基础类型时,则先调用toString()方法,再调用valueOf()方法;

其他类型转化为数字时

原始数据类型 转为number类型
undefined NaN
null 0
false 0
true 1
数字字符串 相应的数字
非数字字符串 NaN

其他类型转化为字符串时

原始数据类型 目标类型
undefined undefined
null null
false false
true true
数字 数字字符串

转换案例

1.基础类型间的运算

console.log(null + undefined);  // 0+NaN=NaN
console.log(null + false);      // 0+0=0
console.log(1 + true);          // 1+1=2
console.log(1 + '1');           //'11' -> 数字与字符串相加结果是字符串
console.log(1 + 2 + '3');       //'33';(1+2)的结果然后与'3'相加;
console.log(1 + (2 + '3'));     //'123';先运算2+'3',然后1+'23'
console.log('s' + null);        //'snull'
console.log('s' + undefined);   // 'sundefined'
console.log('s' + true);        //'strue'
console.log(1 + true + undefined + 's'); // 1+1+NaN+'s'=2+NaN+'s'=NaN+'s'=NaNs

2.Date对象的转换,先调用toString再调用valueOf

// 1.为了便于观察重写Date的toString方法和valueOf方法
Date.prototype.toString = function(){
  return 1;
}

Date.prototype.valueOf = function(){
  return 2;
}

var a = new Date,
    b = new Date;

console.log(a + b); // 调用toString,1 + 1,结果是2


// 再重写toString方法
Date.prototype.toString = function(){
  return {};
}

var c = new Date,
    d = new Date;

console.log(c + d); // 调用toString方法返回的不是基础类型,再调用valueOf,2 + 2,结果是4

// 再重写valueOf方法
//    Date.prototype.valueOf = function(){
//        return {};
//    }
//
//    var e = new Date,
//            f = new Date;
//    console.log(e + f); // 报错

你可能感兴趣的:(内置对象)