JavaScript数据类型、类与对象

原创 2016年06月01日 15:35:44

一、理解JS数据类型,类与对象的关系

1、JS数据类型分两种:一种是基本类型,另一种是引用类型
基本类型有string,number,boolean,null,undefined等。另一种是引用类型,function,object(注意都是首字母小写的)。基本类型之间,是没有继承关系的。就像在java中,int与char相互直接是没什么直接关系的。


2、引用类型之:function
function,既是类(当通过new,用function创建对象时,它是类),也是函数。本文主要讲function作为类方面的使用,不涉及其作为函数方面的东西,所以后面所说的类就是指function类型。由function类型衍生出来基础类型的包装类型,主要的有String、,Number,Boolean,Object,Function(注意都是首字母大写的。这些包装类型其实跟java的包装类型差不多)。所有包装类型继承于Object。typeof Object将会返回”function”,由此可以证明Object是function类型的。


3、object元素
由function类型 new出来的,都是object的。如new String,new Number等获得的类型都是object的。当然,对象并非只能function new出来,像这样的也可以var s={},s就是一个对象。
示例:

var s=new String();
           console.log(s instanceof String);//返回true,因为s是String包装类new出来的
           console.log(s instanceof Object);//返回true,因为String继承于Object,而instance
//是根据原形链进行判断的,具体的可看我另一
//篇文章,instance判断原理
           console.log(typeof s=="string");//返回false,因为s是String包装类new出来的
//只有s=””;此句代码才会返回true
           console.log(typeof s=="object");//返回true,因为s是String包装类new出来的

4、string,number,boolean等基本类型元素
直接赋值,而不是通过包装类获得的属性类型基本类型。
示例:

var s="";
           console.log(s instanceof String);//返回false,因为是由值而不是由包装类获得的
           console.log(s instanceof Object); //返回false
console.log(typeof s=="string");//返回true
           console.log(typeof s=="object");//返回false

5、元素与包装类型的关系
基本类型只有值,没有其他。如var s=”“;此时s可以调用s.indexof等方法,这
是因为此时会把s自动装箱成String类型的对象,然后再调用indexof。s是基本类型,只有值,没有方法,但是String对象有

基础元素类型的constructor返回的是其包装类型。例如:

var s="";
console.log(s instanceof String);//false
console.log(s instanceof Object);//false
console.log(typeof s=="string");//true
console.log(typeof s=="object");//false
console.log(s.constructor);//function String()

这里也是由于自动装箱的缘故


6、JS中一切都是对象
因为所有包装类都是function的


二、说明:

为避免混淆,下面说的类就是function类型的,对象则是object类型的


三、类与对象的异同:

引用类型function与object比较特殊,所以这里单独把它们拿出来比较。
1、类可以用来创建对象
例如:

function Person(){}
var p=new Person();

2、类有prototype,而对象没有(但可能有proto
例如:

function Person(){}
var p=new Person();
Person.prototype.age=18;
p.prototype.age=18;//这里将会报错

3、类有name属性而对象没有
例如:

function Person(){}
console.log(Person.name);//输出Person
var p=new Person();
console.log(p.name);//出错

四、函数传参问题:

JS函数传参问题跟Java、C++等OO语言一样,如果传给参数的类型是引用类型,那么传的是引用,如果是其他基本类型(包括基本类型的包装类,这是需要特别注意的),则传的是拷贝。
1、传引用

function update(from,to){
    from.qq="你好";
    from=to;//此时from的引用被更改为to的引用,即此时的from其实是to
}

function From(){}
From.qq="类From";
function To(){}
To.qq="类To";

update(From,To);/*From把自己的引用传递给update的参数from,但是需要注意的是from引用的改变,不代表From的引用也会跟着改变。所以这句代码的执行过程是这样的:From和To分别把自己的引用传递给了update函数的from和to,所以from的引用就是From的引用,于是from.qq=”你好”;也就相当于执行
From.qq= “你好”;然后from=to,于是from的引用=to的引用=To的引用。但这不意味着From的引用就得跟着改变。如果此时再执行from.qq=”你好”,就相当于执行To.qq=”你好”,所以外面的To.qq=”你好”。简言之,from是一个引用,当from=From,from就代表From,其实也就是From把自己的内存地址赋予from了。既然From与from是同一内存地址的,所以对from的属性改变也就是对From属性的改变。当from=To,from就是To的引用,也就是这时候from跟To同一个内存地址了,所以此时对from的改变其实就是对To的改变*/
console.log(From.qq+” “+From.name);//qq属性已经被更改,输出你好 From


2、传基本类型

var s="Linda";
function update(t){
        t="Leo";
}
console.log(s);//输出Linda
update(s);
console.log(s);//依然输出Linda

3、传基本类型的包装类

var s= new String("Linda");
function update(t){
      t="Leo";
}
console.log(s);// 输出String {0: "L", 1: "i", 2: "n", 3: "d", 4: "a", length: 5, 
//[[PrimitiveValue]]: "Linda"}
update(s);
console.log(s); // 依然输出String {0: "L", 1: "i", 2: "n", 3: "d", 4: "a", length: 5, 
//[[PrimitiveValue]]: "Linda"}
s="Leo";
console.log(s);//输出Leo 

五、动态添加属性

动态添加的属性可以用this访问到。如:

var o=new Object;
   o.name="name"; 
o.sayName=function(){alert(this.name)}
    o.sayName();//弹出name。需要说明的是,这里用o调用sayName,所以
//sayName里面的this为o。关于this的介绍可以看我[另一篇文章](http://blog.csdn.net/yu766588220/article/details/51555933)

javascript封装判断全数据类型方法, toString方法, 对象的枚举(in, instanceof, hasOwnProperty的用法), arguments类数组属性

toString方法 javascript封装判断全数据类型方法, 对象的枚举(in, instanceof, hasOwnProperty的用法及其介绍), arguments类数组属性(...
  • c_kite
  • c_kite
  • 2016年10月27日 23:01
  • 461

javascript笔记--流程控制、for、while、数据类型、js对象

今天听课效率还不错,不喜欢手写笔记,用新建txt做笔记,听课效率还不错,望能继续保持。笔记如下: 数组: 数组创建前必须 var arr[]; arr[a][b] 其中a代表行数 b代表列数; ar...

第三章 JavaScript 变量、数据类型、对象

JavaScript 变量 JavaScript中所有的变量都可以直接用var关键定义,即:在定义的时候完全不知道它的类型的, 它的类型依靠于后面所赋予的内容来决定。 变量必须以字母开头 ...

JavaScript(2)变量、数据类型、对象

JavaScript 变量

JavaScript的数据类型、对象及基本知识

前言 正文 JS数据类型 JS对象JSON 创建JS对象JSON 显式new引用类型 使用原始类型隐式调用new对应包装类引用类型 使用字面量literal隐式调用new 如何把属性和方法函数func...

javascript新建对象及基本数据类型

新建对象 1,原始方式 var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.sh...

javascript一些让人迷惑的地方--基本数据类型的包装对象

看个例子: var s= "      xxxx" var xxxx=s.substring(s.lastIndexOf(" ")+1,s.length); 首先得明白在js中字符串可是基本类型...
  • dys1990
  • dys1990
  • 2011年10月03日 02:23
  • 2911

javascript中一切皆对象?基本数据类型也是对象吗?

学习js经常看到这句话——Javascript里面所有的数据类型都是对象 。 1.我们知道js ES5中数据类型分为基本数据类型和复杂数据类型。 基本类型有5类,分别是null,undefined...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript数据类型、类与对象
举报原因:
原因补充:

(最多只允许输入30个字)