JavaScript知识总结--引用类型(Object-Array-Function-Global-Math)
对象(引用类型的值)是引用类型的一个实例,新对象是使用new操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,该函数用于创建新对象。ECMAScript提供了很多原生引用类型(Object,Array,Date,RegExp,Funcion…)。
一、Object类型
1、 创建方式
① 、使用new操作符后跟Object构造函数
Var person=new Object();
Person.name=’xxxx’;
Person.age=10;
② 对象字面量标识法
Var person={
Name:’xxxx’,
Age:10
}
属性默认都是字符串,打不打引号都可以。
2、 使用方式(访问对象的属性)
① 、点表示法
Person.name;person.age;
② 、中括号表示法
Person[‘name’];person[‘age’]
方括号中的字符串可以通过变量传入
二、Array类型
ECMAScript中的数组相对于其他语言来讲比较特殊,是个功能比较多的数据类型。主要区别在于:每一项都可以保存任何类型的数据,数组的大小是可以动态调整的。
1、 创建方式
① 、使用Array的构造函数
Var colors = new Array();
Var colors = new Array(“aa”,”bb”,”cc”);
② 、使用数组字面量表示法
Var colors = [“aa”,”bb”,”cc”];
2、 Array用作栈(FILO)
Array类型自带了两个方法push(),pop(),如果要实现一个栈的数据结构可以直接用Array类型定义。
3、 Array用作队列(FIFO)
Array类型的shift()方法可以取得数组中第一个元素并移除该元素,结合push()方法,就可以将一个数组当做队列来使用
4、 一些常用方法(混个眼熟,用到时再去查)
① 、重排序:Reverse()、sort()
② 、连接Concat();
③ 创建新数组slice();
④ 插入删除替换splice();
⑤ 查找索引indexOf()、lastIndexOf();
⑥ 迭代方法:every()、filter()、forEach()、map()、some();
⑦ 缩小方法:reduce()、reduceRight()
三、Date类型
四、RegExp类型
以上两种类型,低端应用中比较少见,尤其是正则表达式,博大精深不是一句两句能明白的,用到再查API吧。
五、Function类型
什么,函数竟然是一种数据类型,没错,ECMAScript中函数实际上是对象,函数与其他引用类型一样可以具有属性和方法。每个函数都是Function类型的实例,函数名实际上是一个指向函数对象的指针。这意味着js中定义函数时的函数名单从定义函数的角度讲意义不大,因为函数执行的逻辑跟函数名完全没关系。函数名既然是一个变量那么也就意味着它可以作为参数传递给另外的函数,也可以作为函数的返回值返回。
ECMAScript中函数没有定义返回值类型,因为返回值可以是任何类型,这是跟变量的定义相符合的,因为一个变量可以表示任何类型的数据。
Ex1:
Function aa(){};
Var bb=function(){};//与上面效果完全相同。
Ex2:
function aa () {
alert('aa');
};
var aa = function() {
alert('bb');
}
调用aa()时将会输出bb
Ex3:
以下两个button单击后都输出了2,童鞋们,亮瞎眼了吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var golbalaaa= 1;
function test() {
var age=1;
alert(age);
}
function test1() {
var age1=2;
alert(age1);
};
test=test1;
</script>
</head>
<body>
<form>
<input type="button" onclick="test()" />
<input type="button" onclick="test1()" />
</form>
</body>
</html>
1、 函数声明与函数表达式的区别
这里定义函数声明就是带函数名的函数的定义,函数表达式就是不带函数名的函数定义。
解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),这也就意味着通过函数声明方式定义的函数可以先使用后定义;对于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行,这也就是说如果通过这种方式定义的函数必须先定义然后才能使用,否则肯定会报错(unexpected identifier)。
2、 函数的内部属性
① arguments:数组对象,包含着传入函数中的所有参数
a) 这个对象有一个比较特殊的属性:callee,是一个指针,指向拥有这个arguments对象的函数。
② This:this引用的是函数的执行环境对象(与这个函数处于同一级别的环境,也就是这个函数的调用者的作用域)
③ Caller:调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null
④ Length:函数的参数的个数
⑤ Prototype:神奇的原型(先混个眼熟吧,这个东西是跟继承相关)
3、 函数的内部方法
以下两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
① apply():接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以是Array实例,也可以使arguments对象)
② call():与apply()的区别在于接受参数的方式不同,第一个this没有变化,变化的是其余参数都直接(逐个列出来)传递给函数
以上方法真正强大的地方是能够扩充函数赖以运行的作用域,这样一来对象就可以不和方法有任何耦合关系,对象需要什么方法可以通过这种方式调用。
③ bind()。这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的参数(一般是一个对象)的作用域上。是不是有种依赖注入的味道?
六、基本包装类型
常见的OO编程语言都有基本类型的包装类型,目的是为了更方便处理基本类型数据,因为包装了之后就可以增加更多额外的功能。ECMAScript中提供了3个特殊的引用类型:Boolean、Number、String。
Ex1:
Var s1 = ‘xxxxxxxxxxxxxx’;
Var s2 = v1.substring(2);
解释器其实做了这么几个操作:创建一个String类型的实例,在这个String类型的实例上调用substring()方法,销毁这个实例。
使用new创建的引用类型的对象,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的引用类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁,这意味着我们不能再运行时为基本类型值添加属性和方法。
Boolean类型没什么好说的,主要过一下Number类型与String类型的一些常见方法。
1、 Number类型
① toFixed():按照指定的小数位返回数值的字符串表示
② toExponential():返回数值的指数形式表示的字符串
③ toPrecision():
2、 String类型
① 、length属性,表示包含多少个字符
② 、charAt()、charCodeAt():访问字符串中特定位置的字符
③ 、concat():字符串拼接
④ 、slice()、substr()、substring()
⑤ 、indexOf、lastIndexOf()
⑥ 、trim()
⑦ 、toLowerCase()、toLocalLowerCase()、toUpperCase()、toLocalUpperCase()
⑧ 、replace()
⑨ 、split()
七、单体内置对象
所谓打你内置对象:有ECMAScript提供的,不依赖与宿主环境的对象。Object,Array,String等都是内置对象,这里再补充两个Global、Math。
在大多数的ECMAScript实现中都不能直接访问Global对象,不过WEB浏览器实现了承担该角色的windows对象。全局变量和函数都是Global对象的属性。Math对象提供了很多属性和方法,用于辅助完成负载的数学计算。
本文系个人读书总结,转载请注意出处
JavaScript知识总结--引用类型(Object-Array-Function-Global-Math)的更多相关文章
- JavaScript高级编程——引用类型、Array数组使用、栈方法
JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...
- javascript学习笔记 - 引用类型 Object
引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new ...
- JavaScript原型链以及Object,Function之间的关系
JavaScript里任何东西都是对象,任何一个对象内部都有另一个对象叫__proto__,即原型,它可以包含任何东西让对象继承.当然__proto__本身也是一个对象,它自己也有自己的__proto ...
- JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象
数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...
- JavaScript学习 - 基础(五) - string/array/function/windows对象
String对象 更详细转:http://www.w3school.com.cn/jsref/jsref_obj_string.asp //------------------------------ ...
- JavaScript之引用类型(Array类型)
除了Object类型,Array是ECMAScript中最常用的类型了. 与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据. 而且,ECMAScript数组的大小是可以动态调 ...
- 最全的 JavaScript 知识总结
来源于:http://gcdn.gcpowertools.com.cn/showtopic-28404-1-3.html?utm_source=gold.xitu.io&utm_medium= ...
- JavaScript知识精简
JS单线程,同步,一次执行某一段代码,等到前一个程序执行完毕再执行.,阻塞,安全. 多线程,异步,不用等到前一个程序执行完毕就执行. 数据类型 JavaScript 是 弱类型 语言,但并不是没有 ...
- JS 深度拷贝 Object Array
JS 深度拷贝 Object Array function cloneObj(o) { var isArray = o instanceof Array; var isObject = o insta ...
随机推荐
- JavaScript HTML Handlebars Template
/********************************************************************* * JavaScript HTML Handlebars ...
- baos bais 意义
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...
- SimpliciTI无线开发 — 快速搭建低功耗、低成本无线传感器网络
一.初闻SimpliciTI SimpliciTI是TI在2007年宣布推出的针对小型简单RF网络的专有低功耗协议,因其简化了具体的实施操作,降低对微控制器资源的占用,故基于SimpliciTI的RF ...
- .NET实现CORS跨域
1.NuGet:Install-Package Microsoft.AspNet.WebApi.Cors 2.Application_Start中增加(包含在#if DEBUG中):GlobalCon ...
- 【转载】VMware vSphere 5 HA详解 1
很久没有动笔写博客了.总算最近的几项工作告一段落,对iOS和Android的折腾也兴趣稍退,该写点技术博客了. 想写一篇关于VMware HA的博客由来已久,曾经做了些功课,查了不少资料,写了点笔记, ...
- canvas globalCompositeOperation
source-over 默认,相交部分由后绘制图形的填充(颜色,渐变,纹理)覆盖source-in 只绘制相交部分,由后绘制图形的填充覆盖,其余部分透明 source-out 只绘制后绘制图形不相 ...
- eclipse如何通过git把项目上传到码云上
转载:原文链接:https://www.cnblogs.com/yixtx/p/8310311.html 1.eclipse安装git插件 具体我也做过,因为我下载的eclipse版本以及由git插件 ...
- HTTP请求报头及其处理
ps:详细说明http://www.cnblogs.com/kkgreen/archive/2011/04/11/2012829.html
- 为iPhone 6设计自适应布局(iOS8)
Apple从iOS 6加入了Auto Layout后开始就比较委婉的开始鼓励.建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心 ...
- 贴几个erlang文档站点
国外三方的文档,比较全, http://erldocs.com/ 这个貌似是国内的版本,不是很新 http://erldoc.com/ 国内dhq大神的,也不是很新 http://dhq.me/erl ...