一个大四求职的菜鸟的web前端学习之路(二)

       经过这段时间的学习,越来越体会到真正开发的时候知识储备的重要性,还有就是编译器的使用也能够节省开发过程中的很多时间。虽然说并不提倡就使用某一种,但是至少对开发工具的快捷键要有研究,特别是前端学习中,前后端交互时,断点的使用很重要。还有前端的console.log()在不影响代码运行的时候打印一些变量的值看看。后面是接下去总结的部分:


40.对象创建,直接定义对象和对象的属性,调用构造函数,原型(inherit在3.0中的作用),Object.creat()。
41.原型链让继承的对象,只能修改自身的属性,不会影响原型链上方的被继承的属性(有选择的继承和覆盖)属性赋值要么失败,要么修改了原始对象的属性,如果继承的属性有setter方法,则会调用且不会影响原型链
42.查询一个不存在的属性不会报错,但是查询一个不存在的对象则会报错
43.delete属性是断开对象与属性,而不操作属性。delete只能删除对象自有的属性,但不能删除继承的属性。当删除某个属性时需要遍历整个属性中的属性,依次删除,避免内存泄露。
44.检测属性是否在对象内,in运算符(能比较在对象内且类型为undefined的属性),hasOwnProperty(),propertyIsEnumerable()(比前面个可以检测该属性是否可枚举),!==
45.存取器属性,getter(可读),setter(可写)用来代替属性的值。存取器属性不具有可写性,可以被继承。
46.object.esExtensible()判断对象是否可拓展,Object.preventExtensions()转换为不可拓展且不可逆。只对本身有效。Object.seal()也可转换为不可拓展同时每一项自身属性设置成不可配置。
47.对象序列化:将对象转换为字符串,同时也可以将字符串还原成对象。Json.Stringify()和Json.parse()。
48.JS里的数组是动态的,所以在改变数组时不用重新分配空间,而且数组的索引可以是不连续的,这就使得length的属性十分重要。
49.数组的原型是Array.prototype,数组里的值不一定要是常量,其中空的对象返回的属性是undefined
50.创建数组,
var a = new Array();无参数
var a = new Array(10);指定数组的长度
var a = new Array(1,2,...);创建的数组和元素
51.足够稀疏的数组通常在实现上比稠密数组更慢,内存使用率更高,但查询速率相同。在数组直接量中省略全部元素不会创建稀疏数组,省略的内容是存在的,是undefined.
var a1 = [,,,];//包含3个undefined元素
var a2 = new Array(3);//不含元素
O in a1;//true,
O in a2;//false,不存在
52.稀疏数组有两个特殊的属性;一是当一个数组的索引大于或等于现有数组的长度时length+1,二是设置数组的length的属性为小于当前非负整数n时,将删除索引值大于或等于n的元素。
53.push()往数组后面移进一个,pop()数组将数组长度减短1,并返回被删除的元素,shift()从数组开头开始删除元素,且索引会依次减一区别与delete。splice()通用的对数组进行修改,增减,根据需要更改索引
54.在查找数组的属性时,数组的长度最好先获取(将数组的长度先赋值给一个变量,然后使用该变量),再进行循环。未知数组是否稠密,则最好要进行判定去除null和undefined的和不存在的,
if(!a[i])continue;//去除null,undefined,不存在
if(a[i]===undefined)continue//去除undefined和不存在的
if(!(i in a))continue;//去除不存在的
null应该是自己给数组元素赋值,undefined是声明了却未赋值,不存在是用in去检测返回为false的元素
55.Array.join(),将数组的所有元素都转化为字符串并连接起来,可以在括号里加入指定的分隔符,未指定时默认为逗号,可以指定“ ”空格,""不分隔,,逗号,-分隔符与String.split()将字符串分割成数组
56.Array.reverse(),在原有数组使数组逆序。
57.Array.sort()不改变原有数组,默认按照首字母排序,并将undefined放置在末尾,如果需要其他的排序规则可以往sort()中传参数。
58.Array.concat(),创建并返回一个新数组,新的数组包含原来的和新增的元素,不会修改原有的数组!
59.Array.slice(),接收两个参数开始位置,结束位置,创建子数组。能取到前面参数所属的位置,取不到后面参数所在的位置。
60.Array.splice(),该函数的使用会改变原有数组接收两个参数时第一个为开始位置,第二个为从开始位置开始要删除的元素个数。而第二个参数以后的就是需要添加的元素也是以第一个参数为开始位置。
61.pop()删除数组末尾的元素并返回该元素且该数组被修改,push()向数组末尾添加元素并修该数组,shift()删除开头的元素并返回该元素且数组向前移位补全,unshift()向数组开头添加元素并增加原有元素的索引获得更大空间且数组会被修改。
62.toString(),toLocalString(),与调用无参数的join()相同。
63.ES5.0中提供的的函数.forEach(),遍历每一个元素并对没一个元素调用一遍forEach()中的自定义函数来对元素进行操作,但是遍历过程不能停止,只能通拖try{}catch{}
64..map(),将数组的每一个元素传递给map()中的函数并要有返回值,同时产生一个新的数组,且不会改变原有数组
65..filter(),返回一个数组的子数组,且会跳过稀疏数组,返回的是一个稠密的数组
66..every()可以写个函数对所有的函数进行判定是否满足条件返回一个false或true相当于数学上的量词所有,.some()可以写个函数对元素进行判定是否存在这样的元素满足条件返回false或者true相当于数学上的存在
67..reduce(),需要两个参数,一个是能够把数组两个元素化简为一个值的函数,另一个是为reduce()赋予一个初始值。当省略第二个参数时默认使用第一个元素作为初始值,在空数组上调用时省略则会报错。.reduceRight()则是从索引高到低
68..indexof(),从数组开头开始搜索,当找第一个符合要求的 元素时返回该元素的索引,如果没找到则返回-1,而.lastIndexof()则是从数组的末尾开始找,如果是有二个参数,则代表的是搜索的起始位置,且该参数可以是负数,-1为末尾元素
69.ES5.0中判定是否为数组可以调用isArray(),
70.数组的一些属性是对象不具有的:1.当有新的元素加到列表时,自动更新length的长度。2.设置length为较小的值时来截断数组。3.从Array.prototype()中继承一些有用的函数。4.类属性为Array
71.可以给对象定义一个length属性,且对象为只读时能制造成一个类数组,能够实习一些有用的功能。如果要调用数组的方法可以用.call来调用Array.prototype.(选择需要的函数).call
72.字符串可以当做数组,但是isArray()是false。可以把字符串当做是只读的数组。
73.参数传递,将实参的值传入到形参的位置。其中一种传递方式是this上下文。用于初始化对象的函数称为构造函数,在JS里函数可以嵌套定义,函数在各自的作用域里,这样能够形成闭包,增强JS的能力。
74.与函数声明中,变量的定义会提到最前面,即使在定义之前调用也不会有问题,但是表达式的定义前,变量的声明提前了,但是变量的定义不会提前,所以函数没有定义的话就不能使用
75.没有return语句的函数可以称为一个过程,如果return语句没有一个与之相关的语句,或者没有return语句额话,返回值为undefined
76.以语句声明的函数不能出现在循环,条件判定,try/catch/finaly以及with中,当是函数定义表达式可以出现在JS的任意位置
77.构成函数主体的JS代码并不会执行,只有在调用的时候才会执行,调用的方法有作为函数,作为方法,作为构造函数,通过call(),apply()
78.对于普通的函数调用,函数的返回值成为表达式的值,如果该函数的返回是解释器到达词尾则返回值为undefined,如果没有return也是返回undefined,存在return则返回return。
79.方法的调用可以包括更复杂的属性访问表达式,调用属性的方法,方法调用方法(在第一个返回后,继续调用之后的但是返回的类型必须是对象或者不需要返回最好直接返回this)可以形成一个方法链但是要区别于构造函数的链式调用
80. 和变量不同this没有作用域的限制,嵌套的函数不会从调用他的函数中调用继承this,如果嵌套函数作为方法调用则this指向的值为对象,如果嵌套函数作为函数调用,返回的值不是全局对象就是undefined,如果要调用外层的的函数则需要将this保存到变量中

你可能感兴趣的:(JavaScript学习)