javaScript引用类型详解

概念 : 引用类型是一种数据结构,用于将数据和功能组织在一起,也就是 类;

对象为特殊的引用类型实例。新对象由new后加一个构造函数创建的。

构造函数:用于创建对象的函数。

例 : var person = new Object();

object为构造函数,为新对象提供默认属性与方法。

1、object类型

//普通方法

varperson =newObject();person.name ="syr";person.age =22;

//对象字面量

var person = {name :"syr",age :22,5:true//5自动转为"5"}* 数值属性名会自动转为字符串;* 对象字面量推荐只在属性名可读的情况下使用,也是向函数传递大量参数首选方式,必须使用命名参数,对象字面量封装多个可选参数。* 访问对象一般用点表示法,js中也可以用方括号法,将要访问的属性以字符串的形式放进去。

例 : alert(person["name"]); // 等于 person.name

* 方括号法主要优点是可以通过变量来访问属性。* 点表示法属性名不能包含错误的自负或者保留字和关键字,但方括号法可以。* 通常,除非必须使用变量来访问属性,否则推荐使用点表示法。

2、Array类型:

* 数组:数据的有序列表。

es中的数组每一项都可以保存任何类型的数据,数组大小也可以动态调整。

方法一 :new可以省略;varcolors =newArray();方法二 : 数组字面量varcolors = ["red","blue","green"];

与对象一样,字面量不会调用Array构造函数。

varcolors = ["red","blue","green"];colors[0]// 显示第一项colors[2] ="black";// 修改第二项colors[3] ="brown";//增加第四项colors.length ="black";  增加一项

length属性可返回数组的长度,可增加和移除数组的项。

* 检测数组valueinstanceofArray// 判断是否为数组Array.isArray(value)// isArray确定到底是不是数组,不管在哪个环境中创建* 转换方法

所有对象都具有toLocalString()方法,后台调用tostring(),null和undefined返回结果以空字符串表示。

* 栈方法 : 后进先出(吃了吐)

push() : 接受任意数量参数,添加到末尾;

pop() : 移除数组末尾一项。

* 队列方法 : 先进先出(吃了拉);

shift() : 前端移除项并返回该项,长度减1;

unshift() : 前端推入一项;

* 重排序方法

reverse() : 逆序;

sort() : 顺序;

比较的是字符串,会自动转为字符串。

如 "10" 位于"5"的前面,因此应传给sort一个比较函数。

functioncompare(value1,value2){if(value1 < value2){return-1;        }elseif(value1 > value2){return1;        }else{return0;        }    }value= [0,1,5,10,15];value.sort(value);  //0,1,5,10,15* 操作方法

concat()拼接 : 先把原数组复制一个,然后把参数添加至末尾,原数组不变。slice(1,2) : 剪切:返回参数1起始位置,参数2为结束位置,包前不包后,原数组不变。solice() : 主要向数组中插入项。(数组操作最主要的方法):

-删除 : 可删除任意数量项,制定两个参数: arg1位要删除的位置,arg2为要删除的项数,例:splice(0,2) : 删除前两项;

-插入 : 三个参数。起始位置,删除项数和要插入的项,可在后面插入多个项。例 : solice(2,0,"red","green");从位置2插入"red"和"green".

-替换 : 同上,插入项不必与删除项数相等。

注意 : splice()会改变原始数组;

* 位置方法

indexof() : 从头查找

lastIndexof() : 从未查找

arg1表示要查找的项,arg2为起始位置(可选参数),没找到返回-1,比较时使用的是全等。

varnumber= [1,2,3,4,5,4,3,2,1];number.indexof(4) ;//返回5* 迭代方法

every();

filter();

forEach();

map();

* 归并方法

reduce() : 从头

reduceRight ; 从尾

都会迭代数组所有项,构建一个最终返回项。

3、Date类型

varnow =newData();date.parse("May 25,2004");// 新建特定日期* 继承: 重写了3个方法

toLocalString() : 浏览器设置日期;

toString();

valueof();

* 日期格式化方法:

-toDateString() : 特定格式显示星期、月、日、年;

-toTimeString() : 时分秒,时区;

toLocalDateString() : 按地区显示星期、月、日、年;

toLocalTimeString() : 时分秒;

toUTCString() : 特定格式显示完整UTC日期,具体显示因浏览器而异。

4、RegExp类型: 正则表达式;

varexpression =/pattern/flags;标志flags包括 :g : 全局;i : 不区分大小写;m : 多行模式;例子 :varpattern =/at/g全局找atvarpattern =/[bc]at/i; 匹配第一个bat或cat,不区分大小写。无意符须转义;*RegExp实例方法:

RegExp主要方法是

-exec():捕获组,参数为一个字符串,返回数组,无匹配返回null,返回多两个额外属性:index 和 input。

index : 位置 input:捕获的字符串

-test():匹配则返回true,常用来验证用户输入。

5、function类型

* 概念

函数实际就是对象,与其他引用类型一样,有属性和方法,函数名就是只想对象的指针。

* 没有重载

声明相同函数时,后面的会覆盖前面的函数。

* 函数声明和函数表达式functionsum(){    }// 函数声明varsum =function(){    }// 函数表达式函数声明可以变量提升,任何时候任何位置都可以调用。* 作为值的函数

把函数作为参数传给另一个函数,要访问函数而不执行函数,必须去掉函数名后面的那对圆括号

// 从一个函数返回另一个函数

// 根据某个对象数组排序

function compare(pro){

returnfunction(obj1,obj2){varval1 = obj1[pro];varval2 = obj2[pro];if(val1 > val2){return1;        }elseif(val1 < val2){return-1;        }else{return0;        }}}vardata= [{name:"AN:,"age":20},{name:"BN:,"age":30}]data.sort(compare("name"));* 函数的内部属性

内部含有两个特殊对象:this和argument

-argument:包含着传入的所有参数,内有callee属性,是一个指针,只想拥有此对象的函数。

// 递归算法算阶乘

function fac(num){

if(num <=1){return1;            }else{returnnum * fac(num-1);// 等同于 return num * argument.callee(num -1);}} 方法一与函数名耦合严重,且只有名称确定或不发生改变时使用。 方法二更合适*this: 引用的是函数执行的环境对象,函数的名称仅为包含着指针的变量而已,所以在不同的环境中执行引用的也是相同的函数。* 函数的属性和方法(重点)

函数也是对象,因此有属性和方法;

* -属性 : length 和 prototype

-length 表示希望接收命名参数的个数。

-prototype 是保存所有势力和方法的真正所在,如里面保存着tostring(),valueOf等,也可以用来继承,极为重要。

prototype属性不可枚举,因此不能用for-in。

* -方法 : 非继承而来的方法有两个: apply() 和 call().

作用为在特定的作用域中调用函数,实际是设置函数体内this对象的值。两个方法的作用相同,区别为接收参数的方式不同。call() : 参数一一列举

apply() : 参数为一个数组两者的作用不止是传递参数,真正的作用是扩充函数的作用域。把访问不到的地方传进来。

bind():方法,创建函数实例,与this值绑定,全局作用域。

6、基本包装类型 (也是对象)

为方便操作基本类型值,提供3个特殊引用类型:Boolean,Number和String.

每读取值后台都会创建对应的基本包装类型的对象,才可以用方法操作数据。

引用类型与基本包装类型主要区别为对象生存期,用new创建引用累心实例一直保存在内存中,自动创建基本包装类型存在执行瞬间,然后立即销毁,所以不能给基本类型添加属性和方法。

* Boolean 类型

typeof 基本类型 // ‘boolean’typeof 引用类型 // 'object'建议永不要使用Boolean对象

* Number 类型

toFixed()方法 : 按照指定方法返回数值的字符串表示。

var num = 10;num.tpFixed(2) // '10.00'

toExpoential() : 幂

* String 类型

属性:length : 表示含多少个字符方法:

1)字符方法:charAt()和charCodeAt():查找某个字符在字符串中的位置。 charCodeAt():查找字符编码

2)字符串操作方法:拼接用+号

-三个给予字符串创建新串:

slice():切片 // 第一个参数为起始位置,第二个参数为结束位置substr():子函数 // 第一个参数为起始位置,第二个参数为截取的个数substring():子串 // 第一个参数为起始位置,第二个参数为结束位置

以上方法都不会影响原始字符串

3)字符串位置方法:

indexof:从字符串中查找字符串,返回位置,查不到则返回-1.

indexOf:从头查找lastIndexOf:从尾查找 返回第一次出现的位置

4)trim:创建字符串副本,删除前后所有空格,原始字符串不变。

5)字符串大小写转变:

toLocalUpperCase():转大写,针对特定地区

toLocalLowerCase():转小写,针对特定地区

toUpperCase():转大写

toLowerCase():转小写

6)字符串模式匹配方法:

match():与RegExp的exec方法相同,参数为正则表达式活RegExp对象。

search():从尾开始查找,参数与match相同,找不到返回-1

replace():替换

split():切片,基于指定分隔符字符串为多个子字符串。第二个参数可选,返回几个数组。

7、单体内置对象

已自行实例化,可直接使用,Global和Math

* -Global对象,全局对象:所有全局作用域中属性和方法都是它的。

--url编码

--eval():解析字符串代码并执行

* -Math对象

--Math.ceil():向上取整。

--Math.floor():向下取整。

--Math.round():四舍五入。

* random()方法:随机数,返回0~1之间随机数。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,044评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,219评论 0 4
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 677评论 0 0
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,106评论 0 21
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,142评论 0 3