学习js经常看到这句话——Javascript里面所有的数据类型都是对象 。
1.我们知道js ES5中数据类型分为基本数据类型和复杂数据类型。
基本类型有5类,分别是null,undefined,number,string,boolen。
复杂数据类型是object;
2.基本数据类型又被成为值类型 ; 复杂数据类型又被成为引用类型;
3.是不是所有的数据类型都是对象?明显不是。只有复杂数据类型是对象。
4.举个栗子;
String.prototype.str=function()
{
return 'hello';
}
var str1=5;
str1 instanceof String //结果:false
typeof str1 //'string'
str1.str() //hello 可以调用到String.prototype挂载的方法
var str2=new String('a_string');
typeof str2 //object
str2.str() //hello
也可以调用到Number.prototype挂载的方法
所以,在不需要明确判断类型字符串的时候,其实用法上基本没区别。
区别在于,通过对象类型初始化的(typeof显示object) 可以挂载任意方法。而原始类型却不能。str2.bb=function() { return 'bb' } str2.bb() //bb str1.bb=function(){ return 'bb' } str1.bb() //Uncaught TypeError: str1.bb is not a function(…)
除了undefined 和 null 不能直接调用属性,其它的基本数据类型都可以直接调用属性,不存在则返回undefined
所以说js是基于对象的脚本语言。
5.另一个栗子;var num = new Number(7);
console.log(num instanceof Number); //true
console.log(typeof a); // "object"
var num = 7;
console.log(num instanceof Number ); //false
console.log(typeof num); //"number"