void 运算符 | replace方法

来源:互联网 发布:视频监控网络服务器 编辑:程序博客网 时间:2024/06/05 14:13

void 运算符

通常只用于获取 undefined的原始值
void 运算符 对给定的表达式进行求值,然后返回 undefined。

为什么用 void 0 替代 undefined ?

引用自: http://web.jobbole.com/86145/

undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。
undefined 在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域(闭包)中,还是可以被重写的。

用 void 0 代替 undefined 能节省不少字节的大小,事实上,不少 JavaScript 压缩工具在压缩过程中,正是将 undefined 用 void 0 代替掉了。其实 0 也可以是1,2等任任意表达式,只不过是因为 0 简单,所以使用void 0。

replace方法:

replace() 方法执行的是查找并替换的操作
str.replace(regexp|substr, newSubStr|function)
如果第二个参数是字符串,那么可以使用特殊变量:

var str = "John Smith";var newstr = str.replace(/(\w+)\s(\w+)/, "$2 $1");console.log(newstr); // Smith John(\w:匹配数字,大写字母,小写字母,下划线);(\s:匹配空格)

$& : 插入匹配的子串。

$n : 假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。

第二个参数是函数的时候:
如果第一个参数是正则表达式, 并且其为全局匹配模式, 那么这个方法将被多次调用, 每次匹配都会被调用。
“2aa-3bbc-4cdaa-“.replace(/(\d)(\D+)(-)/g,function(){
for (var i = 0, len = arguments.length; i < len; i++)
{
console.log(‘第’ + i + “个参数是” + arguments[i])
}
})
效果图片:
这里写图片描述

每全局匹配到一个子串,函数参数就会多3个。
函数参数:
match: 匹配的子串
p1,p2, : 假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。
offset :匹配到的子字符串在原字符串中的偏移量。

题:(来自牛客网)
获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定 (if) 参数名称,返回全部的参数对象 或者 {}
3. 如果 (if) 存在多个同名参数,则返回数组

思路:遍历 url 参数和参数的值,将参数名作为 键名 , 参数值作为键值存在一个对象中,然后根据传递的参数名返回对应的值。

//摘录自牛客function getUrlParam(sUrl,sKey){        var result = {};        //目的不在替换字符串中的值,而是利用匹配到的值来填充的对象中        sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){            if(result[k] !== void 0){                var t = result[k];                result[k] = [].concat(t,v);            }else{                result[k] = v;            }        });        if(sKey === void 0){            return result;        }else{            return result[sKey] || '';        }    }

concat()方法:参数既可以是数组,也可以是一个字符串,数字等任意类型。

题:
时间的格式化输出

格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五

思路:匹配到给定格式中的部分,然后通过replace方法进行替换,最后进行返回。
链接:https://www.nowcoder.com/questionTerminal/a789783e7c984f10a0bf649f6d4e2d59
来源:牛客网

function formatDate(t,str){  var obj = {yyyy:t.getFullYear(),yy:(""+ t.getFullYear()).slice(-2),M:t.getMonth()+1,MM:("0"+ (t.getMonth()+1)).slice(-2),d:t.getDate(),dd:("0" + t.getDate()).slice(-2),H:t.getHours(),HH:("0" + t.getHours()).slice(-2),h:t.getHours() % 12,hh:("0"+t.getHours() % 12).slice(-2),m:t.getMinutes(),mm:("0" + t.getMinutes()).slice(-2),s:t.getSeconds(),ss:("0" + t.getSeconds()).slice(-2),w:['日', '一', '二', '三', '四', '五', '六'][t.getDay()]  };return str.replace(/([a-z]+)/ig,function(\$1){return obj[\$1]});}

题:字符串中字符的统计:
统计字符串中每个字符的出现频率,返回一个 Object。
思路:先声明一个空对象,然后在向空对象中添加数据。
方法一:for 循环遍历字符串

var res = {};for (var i = 0; i < str.length; i++) {    res[str[i]] ? res[str[i]]++ : res[str[i]] = 1;}return res;

方法二:replace() 遍历字符串(使用箭头函数一行代码搞定)

var res = {};str.replace(/\S/g, (a) => res[a] ? res[a]++ : res[a] = 1)console.log(res);// \S: 匹配所有的非空字符// replace() 可以相当于数组的forEach方法使用。

反向引用:

查找文本中两个相同的相邻单词

var str = "Is is the cost of of gasoline going up up";var patt1 = /\b([a-z]+) \1\b/ig;str.replace(patt1, function(a){    console.log(a);});//Is is//of of//up up// \b:匹配单词的边界的

非获取匹配: ?! ?: ?= 匹配到的值不会进行缓存

?: 正向肯定查找

var con = document.getElementsByName('content')[0].value;var reg = /\b[\w]+(?=ing\b)/g;//匹配带ing的单词,但是不要ing。注意:如果ing后不加\b,类似于goingabc也会匹配。

?!: 正向否定查找 (?!^): 不匹配开头

所谓正向否定查找,就是预先判断不为某个值。

var con = document.getElementsByName('content')[0].value;var reg = /\bwin(?!95\b)/g;//

题:

function cssStyle2DomStyle(sName) {return sName.replace(/(?!^)\-(\w)(\w+)/g, function(a, b, c){        return b.toUpperCase() + c.toLowerCase();    }).replace(/^\-/, '');}// (\w+) :为了确保一个单词中除了开头没有其他的大写字母,所以需要匹配到- 后面所有的字符,然后把第一个大写,其余的小写。// (?!^): 不去匹配开头

HTML5: 嵌入自定义的数据

data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。属性名不应该包含任何大写字母
存储的(自定义)数据能够被页面的 JavaScript 中利用
用户代理会完全忽略前缀为 “data-” 的自定义属性

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 太古造化决 天神决 武神决 逍遥御女决全文阅读 天神决太一生水 太古龙神决 决绝作品 极灵混沌觉决 太古龙帝决 杀寇决 决不能唤醒前世记忆 九天神龙决 混沌霸天决 九天霸体决 极灵混决诀 史前养夫记决绝 吞天决 初学围棋口决 十殿决 天神决一生水 风云决 神龙决楚轩 天地霸体决 弑天逆龙决 极灵混沌决若雨随风 遇事不决量子力学 民国之文豪决绝 霸体决 九荒帝魔决 犹豫不决 荒帝魔决 青龙御女决 太古神龙决 斩神决之君临天下 斩神决君临天下 霸体九星决 大古龙象决 极灵混沌决txt 徐缓江决 乖法口决表 永嘉堰塞湖决口