10 js05 数组、类数组、try/catch、es5严格模式

数组、类数组、try/catch、es5严格模式

1、数组:【后期封装方法基本都在Array.prototype上,这样之后创建的数组都能使用该方法】

(1).数组的创建方式:字面量、构造函数;[创建数组的构造函数只有系统定义的new Array(); 不能自定义构造函数,所以相比于对象来说其更简单] [字面量var arr = []; 内部等同于隐式调用的new Array(); 原型链指向便是Array.prototype,创建的数组使用的方法也都是该Array.prototype上的,当然也可以自己封装方法,丢到Array.prototype上,这样之后创建的新数组就都有该方法了]

[1].js是弱类型语言,var arr = [1,2,3,"skr",{name:"xao"},[] ]; // 区别于强类型语言(定义数据类型后,里面的数据类型就确定了),数组中可以放多种数据类型的数据;

[2].字面量创建与构造函数创建:基本没什么差别,唯一的一点:

var arr = [1,2,3]; 等同于 var arr = new Array(1,2,3);  

var arr1 = [10];//arr1[0]=10;  var arr1 = new Array(10);//10个数据(每个都是空),表示长度; 所以new Array(10.2);//报错(长度不能为小数)

(2).数组的方法:目前基于的是es3.0; (es5.0/es6.0增添了新数组方法,后续会学到)

[ es1.0已废弃;es2.0没有用到;es3.0最全、最基础,最标准的版本(之前所学都是基于此) ;es5.0增添了新方法(新版本浏览器支持,老版本浏览器不支持,浏览器版本发布时候就确定了es标准);es6.0最新、最强大的方法; es7.0 最新标准制定完成,市场还没有投放] ;[es:ECMAScript;  DOM:通过javascript操作HTML页面; BOM:通过javascript操作浏览器,每个浏览器都不兼容(BOM可以随便操作你的浏览器,开发中很少用到) ]

[1].可以改变原数组的方法:只有这七个push(); pop(); shift(); unshift(); reverse(); sort(); splice();

【unshift();封装该方法的思路:添加的数封装为一个数组,然后在该数组上push原数组;或者使用splice();方法,从第0位开始截取,截取0位,放入添加的数据】

[2].重点剖析数组的排序方法sort(); 系统默认采取的排序方法为"逐位ASCII码比较" 升序;

var arr=[1,3,5,4,10,11];  arr.sort();// [1, 10, 11, 3, 4, 5];

------------>>>>>系统为sort();方法留了接口,可以自己封装方法实现不同的功能,但是需要遵守下列的规则:1.方法内必须写两个形参; 2.看返回值:当返回值为负数时,那么前面的数放到前面; 当返回值为正数时,那么后面的数放到前面; 为0的时候,不动;[系统规则判断的标准就是return值是正数还是负数来进行排序]  

最终版:arr.sort( function( a, b){return a-b; / return b-a }); 这里的function(a,b){} 代表着函数的引用,可以写成  var test = function(){};   arr.sort(test); 【重点依旧聚焦到底层实现的逻辑,巧妙应用sort();进行封装方法实现自己想要的功能】

实际应用中排序1:

实际应用中排序2:

[3].不改变原数组的方法:concat(); toString(); slice();  join();// 后续es5.0、es6.0的新方法也不能改变原数组;

var arr = [1,2,3]  arr.toString();//"1,2,3"; 将数组转换为字符串,返回值绝对不是"[1,2,3]"

slice();//不写参数表示截取所有数据;

arr.join("");//括号里必须是字符串(实际其也可以为原始值中的其他类型,例如true,不过没什么用处,记得其为字符串就可以啦),其可将数组按相应字符转换为字符串;相反的字符串的方法str.split("");//括号内也必须是字符串,其可将字符串按相应字符进行转换为数组;

arr.join("");//直接转换为字符串;arr.join();//有逗号; str.split("");//每个都是字符串;str.split();//直接转换为数组;

如何实现:var str="hello" ----->>> "olleh";str.split("").reverse().join("");

2、类数组:其必须有索引属性、length属性,最好有push(); 如果有splice();就更好了;[类数组还是和数组有区别,其没有数组系统自带的方法,需要手动去添加Array.prototype上的方法,才能实现和数组上方法相同的功能]

【arguments就是类数组,其只有length/callee属性,没有数组的方法,若想用需要手动添加方法】

[1].类数组核心必须要有length属性,对象变为类数组后,既有对象的特性也有类数组的特性,两者一起使用,这样在存储方面更强大;

阿里面试题:

3、数组去重:

数组去重:巧妙使用对象的属性“特性”,把数组的每个值作为对象的属性,对象的属性只能对应一个属性值,判断:若是某属性已经有了属性值,那说明这个数就出现过了;

封装type()方法:[解决typeof()的bug]

4. try{ } catch(e){ }

js运行三部曲,解释执行的时候当某行代码发生错误的时候,下面的代码便不会执行,日常开发中常常会把可能发生错误的代码放到try语句体内来避免这种情况的发生;[代码出现错误的情况很多,也并非都是我们可控的,例如:后期涉及到前后端数据的传输,很难保证数据是否有效传输,传输过程是否有错误]

(1).如果try{ }语句体内的代码发生错误,之后不会执行语句体内发生错误的代码后面的代码(遇到第一条错误信息就中断),但依旧可以执行外面的代码;

(2).当try{ }语句体内的代码发生错误后,可选择执行catch语句体内的代码;[catch:捕获错误,形参e表示的是系统会把错误信息封装成error对象然后传给形参,该对象有两个属性err.name; err.message;形参名可以取其他名字都OK,使用try{}catch(e){}; 其不会让程序中断(直接把错误信息输出到控制台上),而是将错误信息交由你处理,你可以选择输出到控制台console.log();或者打印出来呈现给用户alert();也可以执行任何代码,一般操作的是打印错误信息,但好处是不会影响后续代码的执行;若是没有错误,就不执行catch语句]

(3).常见错误名称:ReferenceError;  SyntaxError;(语法解析错误例如使用中文标点等)很常见;

补充:try{ }catch(err){ }finally{ };//try中写进行错误测试的代码块,catch抛出错误信息,finally在无论是否异常都会执行;catch和finally语句都是可选的,但在使用try语句时至少使用一个;throw语句来创建自定义信息(手动抛出异常)

5、es5.0严格模式:

浏览器版本发布的时候便确定了使用的es版本,目前浏览器都内置es3.0和es5.0,由于发生冲突使用的是es3.0,所以可理解为其是基于的es3.0和es5.0新增的一些方法(内部含义:浏览器内有两种es版本,当es3.0和es5.0发生冲突的时候,浏览器默认使用的是es3.0版本的标准); 使用es5.0严格模式就是浏览器中当es3.0和es5.0发生冲突的时候,使用es5.0的语法标准;es5.0相比于es3.0语法更加严格,虽降低了js的灵活性,但可以减少错误;[es3.0 -->>> es5.0发展过程中摒弃了些旧语法,产生新语法而已]

(1).es5.0严格模式启动:全局/局部,若全局使用,则页面中必须遵循es5.0的语法标准;[使用字符串而不使用方法的原因:若使用strict();之前浏览器使用的是es3.0版本,其不能识别该方法便会报错,那之后的代码便不能执行,使用字符串无论那个版本都不会报错]

(2).es5.0严格模式(语法标准):其不支持with; arguments.callee; func.caller; 变量赋值前必须声明,局部this必须被赋值(赋值什么就是什么),拒绝重复属性和参数;等等严格模式有很多都是不支持的,例如还有var a = 010;//8进制的数,其在es3.0下是支持的,但在es5.0严格模式下报错;

[1].关于with的使用:with(){};// 参数为对象,其可以改变作用域链,参数会作为新AO对象放到作用域链的最顶端;优点:一些场合的使用可以优化代码,缺点:其操作作用域链,很影响系统的性能;

[es5.0严格模式下不支持:报错]

[2].arguments.callee; func.caller; [es5.0严格模式下不支持:报错]

[3].变量赋值前必须声明,es3.0未声明默认其是window暗示变量;es5.0未声明便赋值,报错(xx is not defined);

[4].局部this必须被赋值(赋值什么就是什么);【全局和es3.0相同,局部若是没有被赋值就是undefined】[new test();按照当初所学:this为{}; 这里返回值为test {}; 原因:前面是构造函数的名,后面才是this指向的{};]

[5].拒绝重复属性和参数; es3.0出现重复属性或参数会发生覆盖现象,并不报错;es5.0严格模式下直接报错;对象中的属性也是如此 var obj {name:"xaohua",name:"xiaodon"}

补充:eval()的使用:es3.0中不支持其的使用(eval是魔鬼),es5.0支持,其有两个作用,1.把字符串当作代码使用;2.其可以改变作用域,不同情况下可针对作用域作出不同的操作,功能特别强大;

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

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,055评论 0 13
  • 当爱人不相识 歌声蹉跎年少 故事发生 褪去一身稚骜 当故人不相认 摘下香烟和表 大病一场 点燃风华正茂 ​​​
    KingLeo丶76阅读 314评论 0 0
  • 印象派。 命名源于《印象·日出》,原本是被挖苦,孰料却成为19世纪一种重要的流派。 莫奈的《圣·拉扎尔火车站》 梵...
    木小玖阅读 419评论 0 0
  • (本故事根据真实事件改编) 第九章:母与子的较量 “把昨天上午第一节课后发的试卷交上来!”晚自习的铃声响起,我走进...
    木禾_520阅读 838评论 22 28
  • 十年磨一剑,今朝问鼎时。 智圆又行方,中考硕果出。 2017年,实验中学中考再创辉煌。 近年来,实验中学在智圆行方...
    史宝月阅读 212评论 0 1