热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Javascript查漏补缺

想温习一下javascript高等程序设计一书的内容,写下了下面的笔记,都是比较细的点,想到什么就写什么了,可以有点略杂。Array数组部份1.Array的length不仅是可读的

想温习一下Javascript高等程序设计一书的内容,写下了下面的笔记,都是比较细的点,想到什么就写什么了,可以有点略杂。

Array数组部份

1.Array的length不仅是可读的,而且是可写的。这就意味着可以经由过程修正length来直接裁剪数组。假如length直接改大,那末没有赋值的处所为undefined

var a = [1,2,3];
a.length=2;
a;//[1,2]
a.length=3;
a;//[1,2,undefined]

2.Array.concat()可以接收许多个参数,而且也支撑范例不一样的。将会返回衔接以后的副本,不会修正本来的数组

var a = [1,2,3];
var b = a.concat('a',[3,4,5],1);
a;//[1,2,3]
b;//[1,2,3,'a',3,4,5,1]

3.splice()函数

参数数量功用
两个参数Array.splice(startPos,delNum)举行删除操纵,第一个参数示意肇端位置,第二个示意删除的个数
多个参数Array.splice(startPos,delNum,*insetElems)删除并插进去,前两个参数同上,以后的参数为在删除的位置须要插进去的元素。假如第二个参数为0,仅举行插进去操纵。

函数Function和字符串String

1.要擅于应用arguments.callee举行解耦。我们在写递归函数的时刻都会在函数内部挪用本身函数,这时候我们假如运用本身的函数名,函数内部就和函数名有耦合。我们直接运用arguments.callee就可以接见到函数名并举行挪用

function addAll(n){
if(n==1){return 1;}
return n+addAll(n-1);
return n+arguments.callee(n-1);//better!
}
var addAll_1 = addAll;
addAll_1(3);//error

2.援用范例和基础包装范例最主要的就是对象的生存期。假如是运用new建立的援用范例实例,那末实行流会一向生存到当前作用域完毕。假如是自动建立的则其基础包装类对象只存在一瞬间

var s = "sad";
s.color = "red";
s.color;//null

3.运用new挪用基础包装类性的组织函数和直接挪用同名函数的结果是不一样的。

var number = Number("123");
typeof number;//number
var number2 = new Number("123");
typeof number2;//Object

4.因为字符串也是相似一个数组,我们想要对string运用Array要领,可以运用call或许apply

var str = '123';
Array.prototype.map.call(str,function(ele){console.log(ele);}

经由过程这个要领可以运用数组的许多要领,比方filter,forEach等。不过貌似许多处所都可以用相似这类形式。
5.数组的要领:trim(),concat()许多都不会修正本来数组的内容,只是建立副本并返回。
6.运用Global对象的encodeURIComponent()函数对一切非字母数字举行编码。decodeURIComponent()举行解码。这个之前写爬虫就爬到了许多相似于unicode的码u5168,或许在网页URI中的一些查询字符%E5%93%88%E5%93%88之类的也可以经由过程这个举行解码,还算是比较好用的一个函数啦。
7.应用bind()函数举行过一次绑定以后就再也不可以举行第二次绑定了。也就是说this已被牢固下来了。

var a = {name:"A"}
var b = {name:"B"}
function getName(){console.log(this.name);}
var getA = getName.bind(a);
getA();//A
var getB = getA.bind(b);
getB();//A

8.只如果继续的,举行instanceof检测的时刻会返回true

a instanceof Object;//true
undefined instanceof Object;//false
null instanceof Object;//false

Object类的属性的属性

属性的属性就是指Object的属性的一些特征。分为数据属性接见器属性。数据属性是用来存储数据数值的,而接见器属性平常举行get/set操纵,而不能举行数据的存储。
个中,数据属性分为四个:

1. [[Configurable]]示意可否经由过程delete删除属性从而从新定义属性
2. [[Enumerable]]示意可否经由过程for-in轮回返回属性。
3. [[Writable]]示意可否修正属性的值
4. [[Value]]示意值

接见器属性

1.[[Configurable]]:默以为true。示意可否经由过程delete删除属性从而从新定义属性,可否修正属性特征,或许可否把属性修正为接见器属性;
2.[[Enumerable]]:默以为true。示意可否经由过程for-in轮回返回属性;
3.[[Get]]:读取属性时挪用的函数,默以为undefined;
4.[[Set]]:写入属性时挪用的函数,默以为undefined。

不能直接增加这些属性。只能用Object.defineProperty()或许Object.defineProperties()举行设置。例子以下

var a = {_name:123}
Object.defineProperty(a, 'name', {
get:function(){
return "我是"+this._name;
},
set:function(newVal){
if(newVal>20){
this._name=newVal;
}
}
})

这里a并没有name这个属性,然则经由过程get()建立了从name_name的映照。可以使得数据属性的操纵越发天真。
下面是同时举行多个属性的设置的语法示例:(writable设置为false示意不能举行值的修正。)

Object.defineProperties(
a,{_name:{value:23,writable:false},{name:{get:function(){return this._name;},set:function(){}}
}
}
)

原型链

可以经由过程对象实例来接见保存在原型中的值,然则不能经由过程对象实例来重写原型中的值,他会在实例的属性中增加这个值而且遮盖掉原型链中的值。然则经由过程__proto__.prop就可以接见到原型链中的prop属性。
即便是在实例中设置属性为null也不会消弭对原型属性的遮盖。除非运用delete

function Person(){
}
Person.prototype.name="aa";
var a = new Person();
var b = new Person();
a.name="bb";
b.name;//"aa"
a.name=null;
a.name;//null
a.__proto__.name;//"aa"
a.__proto__.name="bb";
b.name;//"bb"

可以经由过程hasOwnProperty()来获取到实例非原型链中是不是有这个属性。

假如要推断实例有这个属性(包含原型链中的属性)用in这个操纵符。
经由过程for-in轮回返回的是对象可以接见到的(包含原型链),而且enumerable设置为true的属性

var c={name:"123",age:23};
Object.defineProperty(c,'name',{enumerable:false})
for(ele in c){console.log(ele);}//only age

假如要返回一切实例非原型链属性(不论是不是可以罗列)

Object.keys(obj)//将返回一切可罗列的,属于实例对象的属性的属性名数组。
Object.getOwnPropertyNames(obj);//返回的是一切实例属性(不包含原型链),不论是不是可罗列

推荐阅读
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
author-avatar
香樟树1016
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有