JavaScript基础之值类型

字符串 1.截取字符串 主要有slice()、substr()、substring() 三种方法 一个参数[i] 都是从i开始截取,返回n及其后面的全部字符串。 第二个参数[i,n] slice(i,n)和substring(i,n)表示从i开始截取到n;substr(i,n),表示从i开始截取n个 负参数 slice()和substr()将最后一位记为-1,然后依次编号;substring()则会将任何负参数变为0,然后查找 let w = 'fintinger.xyz' let a = w.slice(-4, w.length) let b = w.substring(-1, 2) let c = w.substr(-4, 4) console.log(a, b, c);//.xyz fi .xyz 2.查找字符串 主要有indexof()、includes()、lastIndexof() 三种方法 共同点: 两个参数[searchString,position],第一个为要检索的字符串,第二个为开始检索位置; 若position < 0,则position = 0 position可以省略 不同之处: lastIndexof()为从右往左找,找到第一个立即返回索引!其他两个都是从左往右 indexof(),lastIndexof()找不到则返回-1,includes()找不到返回false position 省略之后,includes(),indexof()默认值为0,lastIndexof()则为str.length 3.重复函数 repeat() 作用: 复制粘贴指定字符串指定次数 案例: /** * 电话号码模糊处理 * @param{String|Number}number * @param{Number}len * @returns {Error|string} * @constructor */ function Phone(number, len = 4) { number = String(number) return number....

Aug 23, 2020 · 3 min · Archai

JavaScript基础之JS黑洞

JavaScript中最容易忽视的一些点 let和var 都用来定义变量,但二者之间有些细微的差别 区别1: 是否有块作用域 var a = 1 { // var a=2 let a = 2 } console.log(a); //output var:a=2 let:a=1 var i=1 // for (var i = 0; i <3; i++) { for (let i = 0; i <3; i++) { //..do something } console.log(i); //output var:i=3 let:i=1 说明: 可以看出,var并没有作用域的概念,定义在特定作用于内的变量会受到作用域外的影响,let则不会 区别2:全局污染问题 console.log(window.screenLeft);//600 // var screenLeft = 1 let screenLeft = 1 console.log(window.screenLeft); //output var:1 let:600 说明: var定义的变量用window对象也可以访问,当定义一些特定的key时,会造成全局的污染!...

Aug 22, 2020 · 1 min · Archai

JavaScript基础之运算符

++的前置与后置 let a1 = 1 let b1 = 2 let c1 = b1 + a1++ console.log(a1, b1, c1);//2,2,3 let a2 = 1 let b2 = 2 let c2 = b2 + ++a2 console.log(a2, b2, c2);//2,2,4 说明: 后置是先计算再++ 前置是先++再计算 短路运算 let a = 0; let b = 1; let c = a || b; console.log(c);//1 利用这个原理,我们可以简化一些函数 let sex = prompt('您的性别?') if (!sex){ sex="保密" } console.log(sex); => let sex = prompt('您的性别?...

Aug 22, 2020 · 1 min · Archai

ES6之Promise用法小结

Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值。其目的主要是解决以往回调中嵌套回调的"嵌套地狱"问题,使代码可读性更好,更美观! 基本用法 对于一个标准的Prommise,其基本写法为: new Promise(function (resolve, reject) { //do something... //success resolve('success') //fail & reject // reject('rejected') *resolve和reject只能出现一个 }).then( function (value) { //if succeed,do something... }, function (reason) { //if fail & reject,do something... } ) 如果采用ES6的箭头函数写法,则为: new Promise((resolve, reject) => { resolve('success') //reject('rejected') }).then( value => {}, reason => {} ) 始终牢记,前一个Promise()必须是在后面一个.then()中处理, 如果前一个Promsie()中没有改变状态,即没有resolve()/reject()方法,后面的.then就不会针对这个Promsie()处理 Promise错误处理 Promise()中的错误处理有两种方式,.then()和.catch() .then() 特点: “一一对应”,即一个then()对应处理上一个Promise 用法: new Promise((resolve, reject) => { // 12+p // throw new Error('fail') reject('失败') })....

Aug 18, 2020 · 3 min · Archai

获取文件扩展名

该怎么去获得文件名字符串中的文件扩展名呢? 一种较为强大的解决方法是利用String的slice、lastIndexOf方法: function getFileExtension(filename) { return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2); } console.log(getFileExtension3('')); // '' console.log(getFileExtension3('filename')); // '' console.log(getFileExtension3('filename.txt')); // 'txt' console.log(getFileExtension3('.hiddenfile')); // '' console.log(getFileExtension3('hiddenfile.')); // '' console.log(getFileExtension3('filename.with.many.dots.ext')); // 'ext' 说明 filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2) 本方法中的>>>运算目的是 找到最后一个.所在索引,然后索引-1+2,相当于+1,则slice方法返回.后面的后缀名 .不会再开头,否则索引会是0,因为-1>>>0 = 4294967295,所不会匹配到 .出现在末尾,索引会等于length+1,也不会匹配到 slice(start,end) 说明:start必须指定,负值为从后往前数,若只指定start值,则返回start位置及后面一直到数组结尾所有的元素 **注意:**区别于删除数组中的一段元素的方法 Array.splice() lastIndexOf(searchvalue,fromindex) **说明:**如果要检索的字符串值没有出现,则该方法返回 -1,该方法对大小写敏感 使用: var str="Hello world!" document.write(str.lastIndexOf("Hello") + "<br />")//0 document.write(str.lastIndexOf("World") + "<br />")//-1 document....

Jul 9, 2020 · 1 min · Archai

一组循环数组

做网页轮播图,或者音乐播放列表时经常要用到一组循环的数组,到最后一项返回第一项,第一项返回最后一项 利用两次判断 function doLoop( arr ){ arr.loop_idx = 0; // 返回当前的元素 arr.current = function(){ if( this.loop_idx < 0 ){// 第一次检查 this.loop_idx = this.length - 1;// 更新 loop_idx } if( this.loop_idx >= this.length ){// 第二次检查 this.loop_idx = 0;// 更新 loop_idx } return arr[ this.loop_idx ];//返回元素 }; // 增加 loop_idx 然后返回新的当前元素 arr.next = function(){ this.loop_idx++; return this.current(); }; // 减少 loop_idx 然后返回新的当前元素 arr.prev = function(){ this....

Jul 8, 2020 · 1 min · Archai