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中数据类型有哪些?
- string
- number
- undefined
- boolean
- null
- 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.任何类型和字符串运算,最终的结果都是字符串
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); // 报错