内部属性[[class]]
1. 对象的[[class]]属性
所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]],这个属性无法直接访问,一般通过Object.prototype.toString(..)来查看。
console.log(Object.prototype.toString.call([1,2,3])); //[object Array]
console.log(Object.prototype.toString.call(/\d/)); //[object RegExp]

多数情况下,对象的内部[[class]]属性和创建该对象的内建原生构造函数相对应,不过也不总是这样。
2.基本类型值的[[class]]属性
虽然Null()和Undefined()这样的原生构造函数并不存在,但是内部[[class]]属性仍然是“Null”和“Undefined”。
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]

其他基本类型值的情况有所不同:
console.log(Object.prototype.toString.call("abc")); //[object String]
console.log(Object.prototype.toString.call(42)); //[object Number]
console.log(Object.prototype.toString.call(true)); //[object Boolean]

基本类型值被各自的封装对象自动包装,所以他们的内部[[class]]属性分别为“String”,“Number”和“Boolean”。
3.封装对象
由于基本类型值没有.length和.toString()这样的属性和方法,需要通过封装对象才能访问,此时Javascript引擎会自动为基本类型值包装一个封装对象。
//封装对象包装
var b = 'abc';
console.log(b.length);
console.log(b.toUpperCase());

一般不直接使用封装对象(即通过new操作创建基本类型值),优先考虑使用“abc”和“42”这样的基本类型值,而不是new String("abc") 和 new Number(42)。
4.拆封
如果想要得到封装对象中的基本类型值,可以使用valueOf()函数。
//封装对象的拆封
var s = new String( "abc" );
var n = new Number( 42 );
var b = new Boolean( true ); console.log(s.valueOf());
console.log(n.valueOf());
console.log(b.valueOf());

内部属性[[class]]的更多相关文章
- Javascript高级程序设计——函数内部属性与函数属性
函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针, ...
- Spark RDD概念学习系列之RDD的重要内部属性(十五)
RDD的重要内部属性 通过 RDD 的内部属性,用户可以获取相应的元数据信息.通过这些信息可以支持更复杂的算法或优化. 1)分区列表:通过分区列表可以找到一个 RDD 中包含的所有分区及其所在地址. ...
- C#对象内部属性排序测试
构建对象: class SortGrid { int indexI; int indexJ; public SortGrid(int x, int y) { indexI = x; indexJ = ...
- js中的内部属性与delete操作符
本文正式地址:http://www.xiabingbao.com/javascript/2015/08/03/javascript-delete-configurable 在讲解Configurabl ...
- 对象内部属性[[Class]]
1.概述 所有的typeof返回值为‘object’的对象都包含一个内部属性[[Class]],我们将它可以看做内部的分类,而非传统面向对象意义的分类.这个属性无法直接访问,一般通过Object.pr ...
- es6之Object扩展及内部属性的总结
对象扩展: 1.Object.is(A,B) :比较两个值是否相等,取代===运算:只要值相等代表相等:其中NAN和NAN相等:+0和-0不相等: 2.Object.assign(target,sou ...
- js--对象内部属性与 Object.defineProperty()
前言 JavaScript 中允许使用一些内部特性来描述属性的特征,本文来总结一下对象内部属性与 Object.defineProperty() 的相关知识. 正文 1.属性类型 js中使用某些内部属 ...
- javascript知识点总结----函数内部属性
在函数内部,有两个特殊的对象:argumengs和this 1.函数的参数 ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,也就是说:你定义的函数只接收2个参数, ...
- javascript——函数内部属性
<script type="text/javascript"> //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包 ...
随机推荐
- webssocket简介-服务器可以主动传送数据给浏览器
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并 ...
- DateUtils.formate()函数的“bug”
写在前面 项目功能测试, 日期格式转换出现个诡异的问题, 转换后的时间总是和系统当前时间相差8小时, 问题是另一个项目和这个代码完全一样, DateUtils.java, 包括formatDate() ...
- ThinkPHP 5.1 跨域中间件
<?php namespace app\http\middleware; class CrossDomain { public function handle($request, \Closur ...
- C++ 函数模板print
简述 在知乎看到文章leetcode 的奇怪 println vector 工具,于是手痒自己也写了一个print函数. 因为工作中没有需要写这种代码的情况,所以好久没有写这种代码了,还是挺怀念以前学 ...
- QT自定义信号和槽
最近项目中使用到QT,在此记录一下QT的核心,信号与槽: QObject::connect(const QObject *sender, const char *signal, const QObje ...
- openwrt如何打开linux内核的CONFIG_DEVMEM选项?
答: 直接在openwrt的make menuconfig中打开CONFIG_KERNEL_DEVMEM选项即可
- [转]将已有项目代码加入svn版本控制
原文链接:https://blog.csdn.net/aaroun/article/details/79074178 将已有项目代码加入svn版本控制 - TortoiseSVN入门篇Windows下 ...
- postman 测试Excel文件导入导出功能
1.导入的测试方法 选择form-data,key值填写方法对应的参数,选择File,Value处上传文件即可. 2. 导出的测试方法 在导出文件的时候,响应结果是乱码,然后在测试的时候选择下载,下载 ...
- k8s记录-node组件部署(十)
1)CA 证书配置登录 192.168.0.1 app 用户下cd ssl/kubernetes#注意修改 KUBE_HOME,BOOTSTRAP_TOKEN #与 3.5 3)token 一致,KU ...
- Linux(CentOS)安装JDK1.8
1.JDK的RPM包安装方式: https://www.cnblogs.com/hunttown/p/5450463.html 2.JDK的tar包安装方式: 首先,从SUN公司网站下载最新的JDK ...