Javascript基本类型回顾
本文是学习和总结ECMAScript5.1规范形成的。是对规范中所提及的Javascript类型进行剖析后的个人观点的表达(如有Bug望各位道友指正)。主要是各类型的实例方法,不包含任务构造函数的方法。剖析的切入点如下:
1. 是否可以继承
2.通用方法、非通用方法,以及通用方法的使用。
名词解释: 通用:表示此方法可以被其他类型调用,也就是this指针可以改变 非通用:不可被其他类型调用,this指针只能是当前类型
一、Function与Object
var Cn = new Function("alert('1');this.a='a';");
var _cn = new Cn(); //_cn:Object类型;Cn:Function类型,new的Function,他的类型都是Object
new Function和关键字function是相同的作用,创建一个Function的实例。
实例方法 | 是否通用 | 说明 |
constructor | 非通用 | |
toString | 非通用 | |
toLocalString | 非通用 | 为派生类提供接口 |
valueOf | 非通用 | |
hasOwnProperty | 非通用 | 不考虑原型链 |
isPrototypeOf | 非通用 | 判断对象是否存在于指定对象的原型链上 |
propertyIsEnumerable | 非通用 | 不考虑原型链 |
二、Array可以继承
every返回第一个为false的元素
实例方法 | 是否通用 | 说明 |
constructor | 非通用 | |
toString | 通用 | |
toLocaleString | 通用 | |
concat | 通用 | |
join | 通用 | |
pop | 通用 | |
push | 通用 | |
reverse | 通用 | 反转数组 |
shift | 通用 | 删除数据第一个位置的元素,并返回 |
slice | 通用 | 返回start和end之间的元素,start不被包含 |
sort | 通用 | |
splice | 通用 | 删除数据元素,以索引下标开始,个数 |
unshift | 通用 | 在数组第一个位置插入元素 |
indexOf | 通用 | |
lastIndeOf | 通用 | |
every | 通用 | 返回第一个为false的元素 |
some | 通用 | 返回第一个为true的元素 |
forEach | 通用 | |
map | 通用 | |
filter | 通用 |
通用使用方法示例代码:
function CustomFn(){
this["0"] = "asfd";
this["1"] = "第二个";
this["2"] = "第三个";
this.length = 3;
}
var pt = CustomFn.prototype;
pt.join = Array.prototype.join;
pt.shift = Array.prototype.shift;
var cu = new CustomFn();
console.log(cu.join("-"));
cu.shift();
console.log(cu.join("-"));
注意:想要利用Array的通用方法,类的结果就得构建得像一个数组,所以我们必须满足数组两个必要的条件:
- 下标:用0,1,2是为了表示数组索引下标;
- 长度:length是为了表示数组的长度;
三、Number、String、Boolean、Date
String类型有些许的通用性方法,但Number、Boolean和Date却未能明确标记出通用性方法。方法细节此处就不存赘述,如想具体了解可查看ECMAScript5.1的规范。这里只给出一个Number使用String通用方法的示例代码:
function CustomNumber(){
}
var pt = CustomNumber.prototype;
pt.toString = function(){
return 134;
}
pt.ct = String.prototype.charAt;
var _num = new CustomNumber();
console.log(_num.ct(1)); Number.prototype.cCharAt = String.prototype.charCodeAt;
console.info((10).cCharAt(1));
注意点:
- 能被其他对象的引用的只有通用方法
- 重写基类的原型方法,如CustomNumber类的原型方法toString(重写的Object类的),为什么要重写toString,这个可从ecmaScript规范中获得,因为他在调用charAt、charCodeAt等方法是会先调用toString方法获取值。
- 类型转换:CheckObjectCoercible方法,内部还会调用ToObject方法,将基本类型转换为引用类型。
四、Error
用于显示或抛出程序运行时的异常信息,主要name、message等实例属性(可以设置的),Stack(只读,异常的堆栈信息)。
ECMAScript5.1派生类实现代码:
function Inherit(Sup, Chid){
Chid.prototype = Object.create(Sup.prototype); //作为函数或者类时的原型
Object.defineProperty(Chid,'constructor',{
value: Chid,
enumerable:false,
writable:true,
configurable:true
}); //构造函数
Chid.__proto__ = Sup; //作为对象的原型(构建原型链)
} var CustomError = function(_error){
Inherit(_error, CustomError);
function CustomError(){
var applyCustructor = (CustomError.__proto__ || Object.getPrototypeOf(CustomError)).call(this); //执行父级的构造函数
//父类构造函数有返回值,就有返回值,否则就用this
var _this = ( typeof applyCustructor == 'object' || typeof applyCustructor == 'function' ) ? applyCustructor : this;
_this.name = 'sdf';
return _this;
}
return CustomError;
}(Error); var _error = new CustomError();
throw _error;
重点理解:var applyCustructor = (CustomError.__proto__ || Object.getPrototypeOf(CustomError)).call(this);
这句代码,表示执行CustomError原型上的构造函数(也就是Error),与var applyCustructor = Error.call(this);
是等效的
ES6的派生类实现:
class CError extends Error{
constructor(){
super();
this.name = '子类';
}
}
var _e = new CError();
V8环境下运行的区别:
Javascript基本类型回顾的更多相关文章
- JavaScript事件类型
JavaScript事件类型 Web浏览器中可能发生的事件有很多类型.这里我将主要将下面几种常用的事件类型: UI事件 焦点事件 鼠标与滚轮事件 键盘与文本事件 复合事件 变动事件 HTML5事件 设 ...
- Flow: JavaScript静态类型检查工具
Flow: JavaScript静态类型检查工具 Flow是Facebook出品的,针对JavaScript的静态类型检查工具.其代码托管在github之上,并遵守BSD开源协议. 关于Flow 它可 ...
- javascript 操作符类型隐性转换
javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...
- javascript学习-类型判断
javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...
- JavaScript的类型自动转换高级玩法JSFuck
0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!( ...
- 面向对象的JavaScript --- 动态类型语言
面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...
- javascript 字典类型的使用
javascript 字典类型的使用 1.使用Array: var arr = new Array(); arr["zs"] = "zhangsan"; ar ...
- javascript变量类型及作用域
javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...
- js课程 1-3 Javascript变量类型详解
js课程 1-3 Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...
随机推荐
- 我把一些Linux的中英文命令做了对应翻译大家参考一下
本文我们把Linux的中英文命令做了对应翻译,给需要的朋友参考一下.(http://wap.0834jl.com) 很多朋友在论坛上找Linux英文命令,我们给大家整理了比较全的Linux英文命令,并 ...
- caffe编译错误记录
1. caffe.pb.h丢失问题 错误代码如图: zhuoshi@zhuoshi-SYS-7048GR-TR:~/ZSZT/Geoffrey/caffe/caffe-master$ make all ...
- fidderl 录制导出 jmeter格式文件
总共需要五步 1.下载扩展脚本 2.将下载后的文件剪切到 fiddler 安装目录下 3.重新启动fillder 4.设置筛选条件 5.录制完成后导出文件 1.下载扩展脚本 首先需要下载支持jmete ...
- Python PE8 编程规范
1.使用四个空格而不是tab进行缩进 2.默认使用utf-8编码 3.尽量不要使用魔术方法 4.类中使用self作为默认参数 5.命名时,尽量使用驼峰式或单词+下划线,要保证见名知意 6.操作符和逗号 ...
- 数据分析——pandas
简介 import pandas as pd # 在数据挖掘前一个数据分析.筛选.清理的多功能工具 ''' pandas 可以读入excel.csv等文件:可以创建Series序列,DataFrame ...
- Hive中的Order by与关系型数据库中的order by语句的异同点
在Hive中,ORDER BY语句是对查询结果集进行整体的排序,最终将会产生一个reducer进行全局的排序,达到的最终结果是和传统的关系型数据库是一样的. 在数据量非常大的时候,全局排序的单个red ...
- TCP(控制传输协议)详解
1.传输层概述 在OSI参考模型中,网络层是面向通信的最高层但同时也是面向用户程序的最底层. 传输层的主要作用: 复用:在发送端,多个应用程序公用一个传输层: 分用:在接收端,传输层把从网络层接收到的 ...
- tomcat安装启动startup.bat文件命令行界面出现乱码的问题解决
进入tomcat安装界面,进入conf文件夹,找打logging.properties,打开进行编辑,在最后添加一句 java.util.logging.ConsoleHandler.encoding ...
- .net 发布程序时出现“类型ASP.global_asax同时存在于...”错误的解决办法
web程序发布后,通过浏览器访问程序显示如下的错误信息: 编译器错误消息: CS0433: 类型“ASP.global_asax”同时存在于“c:\WINDOWS\Microsoft.NET\Fram ...
- [LeetCode] Leaf-Similar Trees 叶结点相似的树
Consider all the leaves of a binary tree. From left to right order, the values of those leaves form ...