JavaScript语言精粹【数组、正则表达、JSON、JSLint】
来源:互联网 发布:虚拟打印机端口删除 编辑:程序博客网 时间:2024/06/05 23:06
四、数组
当属性名是小而连续的整数时,应该使用数组;否则使用对象。数组:
var numbers = ['zero','one','two','three','four','five','six','seven','eight','nine'];对象字面量:
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函数弥补缺憾:
var is_array = function(value){return value && typeof value === 'object' && value.constructor === Array;}上述方式,在识别从不同的窗口(window)或帧(frame)里构造的数组时会失败,对应方式:
var is_array = function(value){return Object.prototype.toString.apply(value) === '[object Array]';}补充:
var ary = [1,2,3]Object.prototype.toString.apply(ary)// "[object Array]"Array.prototype.toString.apply(ary) 等价于 ary.toString()// "1,2,3"
4. 为数组添加方法
var data = [4,8,16,32];var add = function(a,b){return a+b;}方式一(沿用method方法):
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
方式二(数组也是对象,为对象添加方法):
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标识多行
实例:
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/ 1 0
- JavaScript语言精粹【数组、正则表达、JSON、JSLint】
- 《JavaScript语言精粹》--JSLint
- javascript语言精粹(数组)
- JavaScript语言精粹笔记之正则表达式
- JavaScript语言精粹——正则
- 《JavaScript语言精粹》--第6章:数组
- JavaScript语言精粹——数组
- JavaScript语言精粹之数组篇
- 《JavaScript语言精粹》--第7章:正则表达式
- 《JavaScript语言精粹》读书笔记
- 《JavaScript语言精粹》读书笔记
- JavaScript语言精粹
- 函数 -- Javascript语言精粹
- javascript语言精粹
- javascript语言精粹----笔记
- javascript语言精粹-------------------------读书笔记
- JavaScript语言精粹(读书笔记)
- javascript语言精粹----笔记
- Linux 下开启ssh服务
- [leetcode]31 Symmetric Tree
- As second twin awaits kidney donor, rural Washington family can only wait
- linux系统使用sudo命令报xxx is not in the sudoers file.This incident will be reported.的解决方法
- 第二章作业题51.3(编写一个程序从键盘输入10个数,要求输出其中最小的。)
- JavaScript语言精粹【数组、正则表达、JSON、JSLint】
- # 我回家了,你们继续加油(2014年总结)
- C语言中的指针数组和数组指针
- [体系结构]设计模式(四)
- 微软面试3 最大子数组问题
- TCP与UDP的区别
- 本地启用XAMPP – MySQL shutdown unexpectedly问题解决
- 23种设计模式全解析
- C++之多态