Javascript-类型/值、对象、类

一、弄不清的概念
1.数据类型
数据类型分为原始类型和对象类型。
(1)原始类型:number数字、string字符串、boolean布尔值、null空、undefined未定义;
(2)object对象类型:object普通对象、array数组、function函数,以及三种具有实用API的特殊对象——date日期、regexp正则、error错误。
通常称对象为引用类型。两个单独的对象永不相等,引用同一个内存地址的两个对象才相等。

2.直接量
(1)数字直接量(一个数字直接出现在js程序中);
(2)字符串直接量(由单引号或双引号括起来的字符序列);
(3)正则表达式直接量(两条斜线之间的文本构成);
(4)对象直接量(由若干名/值对组成的映射表)。

3.值和对象.(原始值和包装对象)
(1)字符串值和字符串对象;
(2)数字和数值对象;
(3)布尔值和布尔对象。
字符串值、数字、布尔值这三种不是对象但是可以使用对应对象的属性和方法。原因是:拿字符串举例,字符串值引用length属性时,js会先将字符串值通过调用new String()的方式转换成对象,取到length属性值后又立刻销毁这个对象(实现上不一定是这样,但是看起来过程是这样的)。因此字符串值、数字、布尔值的属性都是只读的,并且不能给它们定义新属性。
等于运算符将值和对象视为相等,全等运算符将它们视为不等。

4.对象
包含属性、原型、类、扩展标记。
(1)属性:本对象的属性继承自它的原型对象;
(2)类:一个标识对象类型的字符串;
(3)扩展标记:指明可否向该对象添加新属性;
(4)原型:指向另外一个对象(父对象)。

5.原型
对象的原型属性是用来继承属性的。

var a=new Array();//对象a的原型是Array.prototype,即对象a继承了Array的属性
var b={};//对象b的原型是Object.prototype

原型链:
这里写图片描述

6.对象的类属性
对象的类属性是一个字符串,用以表示对象的类型信息。
要想获得对象的类,可以调用对象的toString()方法。但是很多对象继承的toString()方法重写了,所以必须间接地调用Function.call()方法。例如,

var str="hello cxy!";
var strClass=Object.prototype.toString.call(str).slice(8,-1);
console.log(strClass);//输出"String"
//调用Object.prototype中的toString方法返回一个字符串"[object class]"
//因此在这里需要截取返回值中的第8-倒数第2段字符串内容,才为对象的类

编写一个classOf函数,返回传递给它的任意对象的类:

function classOf(o){
	return Object.prototype.toString.call(o).slice(8,-1);
}

7.类
(1)类和原型:类可以从一个原型对象上继承属性。如果定义一个原型对象,然后通过一个函数创建一个继承自它的对象,这样就定义了一个js类。原型是类的唯一标识,当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例。
(2)类和构造函数:通过同一个构造函数创建的所有对象都继承自一个相同的对象,因此它们都是同一个类的实例。从某种意义上讲,定义构造函数就是定义类。
(3)类、构造函数、原型、实例之间的关系
这里写图片描述


二、弄不清的类型转换
1.其他值转布尔值

  • false、undefined、null、0、-0、NaN和空字符串这7种会转成“假值”false;
  • 其他都会转成“真值”true。

2.除了null和undefined之外的任何值都具有toString()方法。
3.对象转换的两个方法:

  • toString() 对象转字符串
({x:1,y:2}).toString();//普通对象=>[object Object]
([1,2,3]).toString();//数组=>1,2,3
(function(){alert("a");}).toString();//函数=>function(){alert("a");}
new Date(2018,8,2).toString();//日期对象=>Sun Sep 02 2018 00:00:00 GMT+0800 (中国标准时间)
/\d+.toString();//RegExp类=>/\d+
  • valueOf() 对象转原始值
//普通对象、数组、函数、正则表达式返回对象本身
new Date(2018,8,2).valueOf();//日期对象=>(时间戳)1535817600000

4.对象到原始值的转换经过
这里写图片描述


三、检测类型
1.typeof
返回值为表示操作数类型的一个字符串。
这里写图片描述
2.instanceof
左操作符是待检测其类的对象,右操作符是构造函数。但实际上是检测了对象的继承关系,而不是检测创建对象的构造函数。
3.isPrototypeOf
只能检测对象是否属于指定的类名。

a.isPrototypeOf(b);//检测a是否是对象b的原型

4.constructor属性
调用对象的constructor属性,返回该对象的构造函数。

——阅读《Javascript权威指南》第三章、第六章、第九章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值