前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript语言精粹【数组、正则表达、JSON、JSLint】

JavaScript语言精粹【数组、正则表达、JSON、JSLint】

作者头像
奋飛
发布2019-08-15 16:13:54
4840
发布2019-08-15 16:13:54
举报
文章被收录于专栏:Super 前端Super 前端

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://ligang.blog.csdn.net/article/details/44701967

四、数组

当属性名是小而连续的整数时,应该使用数组;否则使用对象。 数组:

代码语言:javascript
复制
var numbers = ['zero','one','two','three','four','five','six','seven','eight','nine'];

对象字面量:

代码语言:javascript
复制
var numbers_object = {'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}

numbers继承自Array.prototype numbers_object继承自Object.prototype

1. 删除

delete numbers[2]; // 会在数组中留下一个空洞['zero','one',undefined,'three','four','five','six','seven','eight','nine'] numbers.splice(2,1); // 对于大型数组效率不高['zero','one','three','four','five','six','seven','eight','nine']

2. 枚举

for in无法保证属性的顺序,且可能从原型链中得到意外属性 for可以避免此类问题

3. 判断是否为数组

JavaScript中对数组和对象的区别是混乱的,typeof运算符的结果都为'object' 自定义is_array函数弥补缺憾:

代码语言:javascript
复制
var is_array = function(value){
	return value && typeof value === 'object' && value.constructor === Array;
}

上述方式,在识别从不同的窗口(window)或帧(frame)里构造的数组时会失败,对应方式:

代码语言:javascript
复制
var is_array = function(value){
	return Object.prototype.toString.apply(value) === '[object Array]';
}

补充:

代码语言:javascript
复制
var ary = [1,2,3]
Object.prototype.toString.apply(ary)	// "[object Array]"
Array.prototype.toString.apply(ary) 等价于 ary.toString()	// "1,2,3"

4. 为数组添加方法

代码语言:javascript
复制
var data = [4,8,16,32];
var add = function(a,b){
	return a+b;
}

方式一(沿用method方法):

代码语言:javascript
复制
Array.method('reduce',function(f,value){
	var i;
	for(i=0;i<this.length;i++){
		value = f(this[i],value);
	}
	return value;
});

调用: var sum = data.reduce(add,0); // 60 方式二(数组也是对象,为对象添加方法):

代码语言:javascript
复制
data.total = function(){
	return this.reduce(add,0);
}

调用: total = data.total(); //60

5. JavaScript没有多维数组,但其支持元素为数组的数组。

五、正则表达式

JavaScript语法借鉴自Java,函数借鉴自Scheme,原型继承借鉴自Self,正则表达式借鉴自Perl。 regexp.exec、regexp.test、string.match、string.replace、string.search、string.split /^ $/i /^开头,$/结尾, g标识全局的 i标识忽略字母大小写 m标识多行 实例:

代码语言:javascript
复制
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url = "http://www.ora.com:80/goodparts?q#fragment";
var result = parse_url.exec(url);
var names = ['url','scheme','alash','host','port','path','query','hash'];
var blanks = '  ';
var i;
for(i=0;i<names.length;i++){
	document.writeln(names[i]+":"+blanks.substring(names[i].length),result[i]+"\r\n");
}

结果: url: http://www.ora.com:80/goodparts?q#fragment VM2603:9 scheme: http VM2603:9 alash: // VM2603:9 host: www.ora.com VM2603:9 port: 80 VM2603:9 path: goodparts VM2603:9 query: q VM2603:9 hash: fragment 说明: (?:...):表示一个非捕获型分组

六、JSON

JSON有6种类型的值:对象、数组、字符串、数字、布尔值和null。 JSON对象是一个容纳“名/值”对的无序集合。名字可以是任何字符串。值可以是任何类型的JSON值。 JSON字符串被包围在一对双引号之间。\字符被用于转义。 使用eval函数可以把一段JSON文本转化成一个有用的数据结构: var myData = eval('('+ myJSONText +')'); 解释;用圆括号把JSON文本括起来是一种避免JavaScript语法歧义的变通方案。JavaScript中不允许以左花括号“{”开始,因为那会与块语句产生混淆。“()”在此处作为表达式的分组运算符,能对包围在其中的表达式进行求值,能正确识别对象字面量。 建议;使用JSON.parse替代eval 恶习: 把Ajax返回的HTML文本赋值给某元素的innerHTML属性,如果其中包含<script>标签或者其等价物,那么一个恶意脚本有可能被注入执行。

七、JSLint

JavaScript语法检测器和校验器,http://www.JSLint.com/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年03月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 四、数组
    • 1. 删除
      • 2. 枚举
        • 3. 判断是否为数组
          • 4. 为数组添加方法
            • 5. JavaScript没有多维数组,但其支持元素为数组的数组。
            • 五、正则表达式
            • 六、JSON
            • 七、JSLint
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档