js

JS中的四大继承方案

落花浮王杯 提交于 2020-03-04 15:45:52
所谓继承,就是子类继承父类中的属性和方法。 方案一:原型继承 方法:子类的原型指向父类的一个实例。 function A() { this.x = 100; } A.prototype.getX = function getX() { console.log(this.x); }; function B() { this.y = 200; } B.prototype.sum=function(){} B.prototype = new A; //B子类 => A父类,让子类B的原型指向父类A的实例 B.prototype.getY = function getY() { console.log(this.y); }; let b = new B; 通过 B.prototype = new A 这一句话达成继承。 js中的面向对象的机制都是基于原型链完成的,所以js中的继承也可以是基于原型链的,但这其中又有很多弊端。 比如B之前的原型B.prototype上的方法b已经查找不到,b的constructor应该是B,但现在是A,b可以通过b.__proto__或b.__proto__.__proto__肆意修改父类上的属性和方法,而父类上不管私有还是公有的属性和方法都会成为子类公有的,这些种种问题都是需要注意的,这大概就是IE浏览器禁止使用__proto__的原因吧。 方案二

js正则及常用方法函数总结

拈花ヽ惹草 提交于 2020-03-04 15:19:58
正则表达式作为一种匹配处理字符串的利器在很多语言中都得到了广泛实现和应用,web开发本质上是处理字符串(服务端接受请求处理后拼接字符串作为响应,这在早期的CGI编程中最明显,然后客户端解析字符串进行渲染和执行),所以说,JS作为一门常用于web开发的语言,必然要具备正则这种强大的特性,本文将对JS中的正则用法及常用函数进行一番总结。 1.正则对象及其属性 首先正则对象是JS中内置的一个对象,好比Array以及Math一样,不需要第三方库的支持,通常我们采取两种方式来定义一个正则对象 1)构造函数方式 var reg=new RegExp('abc','gi'); 这里,第一个参数是正则的内容,第二个参数是修饰符,修饰符通常有三种,i,g,m,i表示的含义是忽略大小写进行匹配,g表示全局匹配即匹配到第一个之后不停止继续匹配,m表示多行匹配即遇到换行后不停止匹配继续直到被匹配字符串结束。 2)字面量方式 var reg=/abc/gi; 两个斜杠之间的是定义的正则内容,最后一个斜杠之后的是修饰符,这种方式比第一种简单高效,所以通常使用第二种方式来定义正则。 其次,正则作为JS中的一个内置对象,它必然有一些属性和方法,如下: 2.属性 在控制台中打印一个正则对象如下: 可以看到它拥有global属性,该属性为布尔类型,用来表示该正则是否是全局匹配,ignoreCase属性,布尔类型

JS正则表达式总结

隐身守侯 提交于 2020-03-04 13:15:49
正则需要传参时,必须使用new RegExp(); var re = new RegExp('\\b'+sClass+'\\b'); ------------------------------------------------------------- 量词,转义字符: \s : 空格 \S : 非空格 \d : 数字 \D : 非数字 \w : 字符(字母,数字,下划线) \W : 非字符 \. :真正的点 \b:独立的部分 (起始,结束,空格) \B:非独立的部分 ^ :放在正则前边,代表起始 $ :代表结束 /^[1-9]\d{4,11}$/ //QQ号检测 + :至少出现一次; | :或 ^ :非 [在中括号里边是非的意思] . :任意字符 {}: {4,7}:最少4次,最多7次 {4,}:最少4次,最多不限 {4}:正好4次 +:{1,} 即至少出现1次 ?:{0,1} 即出现0次或1次 *:{0,} 即至少出现0次 重复子项: var str = 'abca'; var re = /(a)(b)(c)\1/; //true // var re = /(a)(b)(c)\2/; //false ------------------------------------------------------------- 标识:不区分大小写 i 全局匹配 g

springboot使用jmh基准测试评估json反序列化、实体转换的性能差异

╄→尐↘猪︶ㄣ 提交于 2020-03-04 13:02:49
1、背景 笔者经常把一些经常使用的数据放到redis缓存,方便程序进行读取。 比如按照不同的键名将数值存储到hash值类型中。示例如下 hash hashkey hashValue snapshot 999 "{\"id\":999,\"distId\":999,\"distName\":\"玄武区\",\"confirm\":7,\"suspect\":0,\"dead\":0,\"heal\":2,\"weight\":6.6,\"level\":\"area\",\"mapId\":\"c320100_2\",\"updateTime\":\"2020-03-03 07:20:39\"}" snapshot1 999 {"confirm":7,"dead":0,"heal":2,"weight":6.6,"mapId":"c320100_2","updateTime":"2020-03-03 07:20:39","name":"玄武区"} 以上数据分别2052条 分别将snapshot1,snapshot转换成实体,现在将对他们进行基准测试,以评测两种存储方式的性能差异 2、基准测试 2个独立进程,分别依1次热身/热加载,批量执行20次,总计40次 2.1、snapshot1相关测试 这里用的实体转换框架是 ModelMapper ,官网: http:/

Js通过值获取索引下标

安稳与你 提交于 2020-03-04 12:50:35
var list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] var index = list . map ( item => item ) . indexOf ( 8 ) console . log ( index ) //7 var array = [ { name : "aa" } , { name : "bb" } , { name : "cc" } , { name : "dd" } , { name : "ee" } ] var line = array . map ( item => item . name ) . indexOf ( 'dd' ) console . log ( line ) //3 来源: CSDN 作者: 任我行RQ 链接: https://blog.csdn.net/AK852369/article/details/104649195

js再学习笔记

人盡茶涼 提交于 2020-03-04 10:01:40
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var name;` ------就是已定义未赋值或者未定义而使用 **针对变量来说**,占据一个变量的位置而不使用。 - boolean-------布尔类型 - string: `var name="zhangsan"; var englishname='tom';` -----字符串类型,单引号,双引号没什么区别。 - number ----整形和浮点型。 js里边最大的数字 `Number.MAX_VALUE`最小数字 `Number.MIN_VALUE`,无限大 `infinity` - null ---是一个对象。可以当做占位符使用 `var people=null;` ##运算 4. `==` :值比较 ; `===` :值和数据类型都比价 5. `+` :当两个参数是数字做加法运算。当两个参数有一个是字符串类型,做连接。 6. `&&`:js中的与运算,在js内部进行数据类型转换。最后的结果并不是布尔类型而是参与运算中参数 的一个值。 `1&&2`结果为true(其实是2); `0&&5`结果为false(其实是0,0已经决定结果,把右边给短路了) `""&&"hello"

JS中函数定义的三种格式

非 Y 不嫁゛ 提交于 2020-03-04 09:49:02
第一种:function fun1(参数1,参数2...){ //通过创建函数名来定义函数 函数体; } 第二种:var fun2=new Function("参数1,参数2...","函数体"); //通过创建变量来定义函数 第三种:function(){ //匿名函数 函数体; } 说明: 1,在调用时,可以为没有参数的函数传递参数;但如果没有传递参数给有参数的函数时,会默认参数为undefined 2,如果有参数,参数不能使用var关键字 3,js中没有重载,只要名字重复就会覆盖前面的函数 4,在JS中设计函数的时候,任何一个函数内部都有内置的参数,这个参数用来接收传递进来的所有数据。 这个内置的参数arguments。它会把传递的所有参数全部接收。这个arguments是一个数组。 来源: https://www.cnblogs.com/gangqing/p/4147644.html

你不知道的JS系列 ( 19 ) - this 调用位置

99封情书 提交于 2020-03-04 08:05:10
我们排除了一些对于 this 对错误理解并且明白了 每个函数的 this 是在调用时被绑定的,完全取决于函数的调用位置 。寻找调用位置就是寻找“函数被调用的位置”,但是做起来并没有这么简单,因为某些编程模式可能会隐藏真正的调用位置 最重要的是要分析调用栈,就是为了到达当前执行位置所调用的所有函数 function baz(){ // 调用位置是全局作用域,调用栈 baz   console.log('baz');   bar(); // bar 的调用位置 } function bar(){ // 调用位置在 baz 中,调用栈 baz -> bar   console.log('bar');   foo(); // foo 的调用位置 } function foo(){ // 调用位置在 bar 中,调用栈 baz -> bar -> foo   console.log('foo'); } baz(); // baz 的调用位置 可以把调用栈想象成一个函数调用链,但是这种方法非常麻烦并且容易出错。另一个查看调用栈的方法是使用浏览器的调试工具。Sources 里面的 Call Stack;使用开发工具得到调用栈,然后找到栈中的第二个元素,就是真正的调用位置。 来源: https://www.cnblogs.com/wzndkj/p/12407210.html

js语法入门

孤人 提交于 2020-03-04 07:36:53
完整的JavaScript是由ECMAScript(语法)、Browser Objects(DOM、BOM)(特性)组成的。 可以在head或body中使用 标识符命名规则 1、由字母、数字、下划线(_)或者美元符号(💲)组成 2、不能以数字开头 3、不能使用关键字、保留字等作为标识符 ECMAScript的变量是松散类型 松散类型:可以用来保存任何类型的数据 换句话说,每个变量仅仅是一个用于保存值的占位符而已。 1、变量的声明要使用var操作符, 语法:var变量名 2、变量赋值 声明的同时赋值:var变量名=值 先声明后赋值:变量名=值 一次声明多个变量,用逗号隔开,如:var id,sex,age,name=“marry”; 注意⚠️:1、省略var声明的变量是全局变量 2、不推荐省略var操作符来定义全局变量 typeof 功能是用来检测变量类型 语法:typeof变量或者typeof(变量) 返回值:string类型,有可能是:string、number、boolean、object、undefined、function console.log() //在控制台中打印 观察打印ctrl+shift+i undefined:没有定义 undefined类型只有一个值,即特殊的undefined。 说明:一般而言,不存在需要显式地把一个变量设置为undefined值的情况

咸鱼前端—js 创建对象

杀马特。学长 韩版系。学妹 提交于 2020-03-04 03:36:34
咸鱼前端—js 创建对象 对象直接量 通过new创建对象 Object.create() 自定义构造函数创建对象 可以通过对象直接量,关键字new和(ECMA5中的)Object.create()函数来创建对象 对象直接量 对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分割,名/值对之间用逗号分割。整个映射表用花括号括起来 var a = { } //没有任何属性的对象 var b = { x : 0 , y : 0 } //两个属性 var b2 = { x : b . x , y : b . y } //更复杂的值 var book = { "bks title" : "JS" , //属性名中有空格,必须用字符串表示 "sub-tit" : "XianYu" , //属性名中有连字符,必须用字符串表示 "for" : "xianyumgf" , //属性名中有保留字,必须用引号 auther : { //属性的是可以是一个对象 firstname : "dc" lastname : "dg" } } 注意:在ECMA5中,保留字可做不带引号的属性名。ECMA3中则必须用引号,在ECMA5中对象直接量中最后一个属性后的逗号会被忽略,但在ECMA3中IE会报错。 通过new创建对象 new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用