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 ...
随机推荐
- MFMailComposeViewController发送邮件
1.iPhone API已经提供了系统写邮件界面的接口,使用MFMailComposeViewController,用来显示界面. 2.项目中需要添加MessageUi.framework.头文件加入 ...
- 深入理解java虚拟机-第13章-线程安全与锁优化
第十三章 线程安全与锁优化 线程安全 java语言中的线程安全 1 不可变.Immutable 的对象一定是线程安全的 2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施, ...
- window10 下 php7.0 添加Sqlserver扩展
第一步.7.0.x 7.0.x的扩展下载地址: Microsoft Drivers for PHP for SQL Server https://www.microsoft.com/en-us/do ...
- 《selenium2 python 自动化测试实战》(21)——unittest单元测试框架解析
unittest是展开自动化测试的基础——这个框架很重要! 我们先自己写一个测试类: 1.被测试类 Widthget.py: # coding: utf-8 class Widthget: de ...
- REST服务开发实战【转】
原文:http://kb.cnblogs.com/page/91827/ REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(htt ...
- WCF Restful Post调用
一.首先建立Http的服务端,此示例的寄宿体为WindowsService,以下代码仅为WCF Restful服务代码,不包括服务启动和安装代码 1.服务契约 /// <summary> ...
- 【转】VC中MessageBox与AfxMessageBox用法与区别
原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...
- PostgreSQL编译安装
PostgreSQL编译安装 安装语言包 ### PostgreSQL 初始化过程中,会读取操作系统字符编码, ### 若程序需要使用zh_CN.utf-8字符编码,需要在PostgreSQL 初始化 ...
- warning: backslash and newline separated by space [enabled by default]
警告:反斜杠和换行符之间多了空格. 这种问题出现在宏定义 #define,并且有多行,每行之间要用 “\” 连接起来. 解决办法:删除 “\” 后面的空格,直接紧跟回车.
- kbuild-(directory)
-INDEX - this file: info on the kernel build process kbuild.txt - developer information on kbuild kc ...