JavaScript 对象
JavaScript的对象是一种带有属性和方法的无序的集合数据类型,它由若干键值对组成。
- 属性是与对象相关的值
- 方法是能够在对象上执行的动作,是附加在对象上的函数
所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。
JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
Date 对象, Array 对象, 以及 String 对象从 Object.prototype 继承。
给已有的对象增加属性或者方法
- 格式:构造函数名.prototype.新属性或者新方法
创建 JavaScript 对象
JavaScript 允许自定义对象。创建新对象有两种不同的方法:
-
使用 Object 定义并创建对象的实例
-
使用 Object 构建函数
-
person=new Object(); person.firstname="John"; person.lastname="Doe"; person.age=50; person.eyecolor="blue"; person.showPresent=function(){alert(this.age);}
-
-
使用对象字面量创建
- var person={firstname:“John”,lastname:“Doe”,age:50,eyecolor:“blue”};
- 用一个大括号内容表示一个对象,键值对以
xxx: xxx形式申明,用逗号隔开。 - 访问属性是通过
.操作符完成的,要求属性名必须是一个有效的变量名。
-
-
使用构造函数来定义对象,然后创建新的对象实例
-
function person(firstname,lastname,age,eyecolor){ this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; this.changeName=changeName; function changeName(name) { this.lastname=name; } }var john = new person(“John”,“Doe”,50,“blue”);
john.changeName(“Elieen”);
-
JavaScript 内建对象
| 类型 | 描述 | 类型 | 描述 |
|---|---|---|---|
| Function | 函数(方法)对象 | Number | 包装类对象 |
| Array | 数组对象 | String | 字符串对象 |
| Boolean | Boolean对象 | RegExp | 正则表达对象 |
| Date | 日期对象 | Global | |
| Math | 数学对象 | JSON | json对象 |
Function 函数(方法)对象
创建
Method 1: function func_name(形式参数列表){ 函数体 }
Method 2: var method_name = function(形式参数列表){ 函数体 }
属性 :arguments.length : 代表形参的个数
特点
-
方法定义时,形参的类型不用写。
-
方法是一个对象,如果定义名称相同的方法,会覆盖。
-
方法的调用只与方法的名称有关,和参数列表无关。
-
在方法声明中有一个隐藏的内置对象(数组)
arguments,封装所有的实际参数
调用 :方法名称(实际参数列表);
Demo
var fun1 = function(a,b){
alert(a + b);
alert(arguments[0] * arguments[1]);
};
fun1(3,4); // 7,12
数组对象
数组是一个用于存储不同数据类型的变量。它将不同的元素存储在一个盒子中,供以后使用。JavaScript 的数组可以包括任意数据类型;数组的元素可以通过索引来访问。
创建
Method 1 : var arr = ['AAA',2,null,true];
Method 2: var arr = new Array(元素列表);
Method 3: var arr = new Array(默认长度);
属性和方法列表
| Method | Desc | Method | Desc |
|---|---|---|---|
| length; | 数组长度 | sort(); | 对数组进行排序,默认顺序 |
| indexOf(2); | 搜索指定元素的索引位置 | reverse(); | 将数组内容进行反转 |
| slice(0,3); | 截取数组的部分元素,返回新的数组;左闭右开; | splice(n,m,p1,p2); | 从指定的索引开始删除若干元素,然后再从该位置添加若干元素 |
| push(‘A’,‘B’); | 向数组末尾添加元素,返回新的数组长度 | concat(arrOther); | 把当前的数组和另一个数组连接起来,生产并返回一个新的数组 |
| pop(); | 删除数组最后一个元素并返回元素值 | join(separate); | 把当前数组的每个元素都用指定的分隔符连接起来,然后返回连接后的字符串 |
| unshift(‘A’,‘B’); | 在数组头部添加若干元素,返回新的数组长度 | toString(); | 将数组转为字符串,以逗号分隔 |
| shift(); | 删除数组第一个元素并返回元素值 |
特点
-
JS中,数组元素的类型是可变的。
-
JS中,数组的长度是可变的。
Date 对象
创建
Method 1: var date = new Date();
Method 2: var date = new Date(2016,6,20,20,30,15,123);
方法和属性列表
| Method | Desc | Method | Desc |
|---|---|---|---|
| toLocalString() | 根据本地时间格式,转换为字符串 | getTime() | 返回1970.1.1~今的毫秒数 |
| getDay() | 从Date对象返回一周中的某一天(0~6) | getMonth() | 从Date对象返回月份(0~11) |
| getFullYear() | 从Date对象以思维数字返回年份 | getSeconds() | 返回Date对象的秒数(0~59) |
| getHours() | 返回 Date对象的小时(0~23) | getMinutes() | 返回 Date对象的分钟(0~59) |
Math对象
创建
Math对象不用创建,直接使用 Math.方法名();
方法列表
| Method | Desc | Method | Desc |
|---|---|---|---|
| abx(x) | 返回 x 的绝对值 | max(x,y) | 返回 x 和 y 中的最大值 |
| ceil(x) | 对 x 进行上设入 | min(x,y) | 返回 x 和 y 中的最小值 |
| floor(x) | 对 x 进行下舍入 | pow(x,y) | 返回 x 的 y 次幂 |
| round(x) | 把 x 四舍五入为最接近的整数 | random() | 返回[0~1)之间的随机数 |
String 对象
JavaScript 为字符串提供了一些常用方法。注意:调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串。
字符串是不可变的 ,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果。
var s = 'Hello world';
| Method | Desc | Method | Desc |
|---|---|---|---|
| s.length; | 获取字符串的长度 | substring(0,5); | 截取指定索引区间的字串 |
| toUpperCase(); | 将字符串转为大写 | toLowerCase(); | 将字符串转为小写 |
| s[n]; | n是索引号,获取字符串指定位置字符,索引号从 0 开始 | indexOf(‘world’); | 搜索指定字符出现的首字母位置,如果没有找到返回 -1 |
| split(separator, limit); | 将一个字符串分成子串并将它们作为数组返回 | match(‘XX’); | 查找字符串中特定的字符,如果找到则返回匹配到字符,否则返回 null |
| replace(); | 在字符串中用某些字符替换另一些字符 | concat() | 拼接字符串 |
RegExp对象
正则表达式(regular expression): 定义字符串的组成规则
创建
Method 1: var reg = new RegExp("^\\w{6,12}$","i");
Method 2: var reg = /^\w{6,12}$/gi;
RegExp 修饰符 : 修饰符用于执行不区分大小写和全文的搜索。
-
i - 修饰符是用来执行不区分大小写的匹配。
-
g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。
方法
| Method | Desc |
|---|---|
| test() | 验证指定的字符是否符合正则定义的规范,根据结果并返回true或false |
| exec() | 检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。 |
正则表达式:方括号
用于查找某个范围内的字符:
| 表达式 | 描述 | 表达式 | 描述 |
|---|---|---|---|
| [abc] | 查找方括号之间的任何字符 | [A-Z] | 查找从大写 A 到 Z 的字符 |
| [^abc] | 查找不在方括号之间的字符 | [A-z] | 查找从大写 A 到小写 z 的字符 |
| [0-9] | 查找从0至9的数字 | [adgk] | 查找给定集合内的任意字符 |
| [a-z] | 查找从小写 a 到 z 的字符 | [^adgk] | 查找给定集合外的任意字符 |
正则表达式:特殊符号
| 单个字符 | 描述 | 量词符号 | 描述 |
|---|---|---|---|
| \D、\d | 查找(非)单个数字字符[0-9] | n? | 匹配 n 出现 0 次或 1 次 |
| \W、\w | 查找(非)单个单词字符[a-zA-Z0-9_] | n* | 匹配 n 出现 0 次或多次 |
| \S、\s | 查找(非)空白字符 | n+ | 匹配 n 出现 1 次或多次 |
| \0、\n、\f | 查找NULL,换行,换页符 | n{m,n} | 表示 m<= 数量 <= n |
| \r、\t、\v | 查找回车、制表、垂直制表符 | ^n、n$ | 匹配以n开头/结尾的字符串 |
Global对象
特点:全局对象,全局属性和函数可用于所有内建的 JavaScript 对象。
方法
| Method | Desc | MethodDesc | |
|---|---|---|---|
| encodeURI() | url编码 | decodeURI() | url解码 |
| encodeURIComponent() | url编码,编码字符更多 | decodeURIComponent() | url解码 |
| escape() | 对字符串进行编码 | unescape() | 对编码的字符串进行解码 |
| Number() | 将对象的值转换为数字 | parseInt() | 解析一个字符串并返回一个整数 |
| String() | 将对象的值转换为字符串 | parseFloat() | 解析一个字符串并返回一个浮点数 |
| isNaN() | 判断某个值是否是 数字 | eval() | 将 JavaScript 字符串转成脚本来执行 |
JSON 对象
JSON数据类型 :number、boolean、string、null、array、object
对象操作
Map & Set
Map是一组键值对的结构,具有极快的查找速度。
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
迭代:Iterable
ES6标准引入了新的iterable类型,Array、Map 和 Set都属于 iterable类型。
具有iterable类型的集合可以使用 iterable 内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。循环来遍历。
'use strict';
var a = ['ele1', 'ele2', 'ele3'];
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
a.forEach(function (element, index, array) {
console.log(element + ', index = ' + index);
});