(第二章)改善JavaScript,编写高质量代码。
建议34:字符串是非值操作
var a = "javascript";
var b = a;
b = b.toUpperCase();
alert(a); //javascript;
alert(b); //JAVASCRIPT;
建议34
建议35:获取字节长度
String.prototype.lengthBD = function(){
var b = ; l = this.length;
if(l){
for(var i = ; i < l; i++){
if(this.charCodeAt(i) > ){
b+=;
}else{
b++;
}
}
return b;
}else{
return ;
}
}
var s= "String对象长度";
alert(s.lengthDB()); //14 中文为2个数字
建议35
建议36:警惕字符串链接操作
当连接少量字符串时,例如:
str += "one" + " two";
JavaScript在执行这行代码时会进行以下4个步骤:
第一步,在内存中创建一个临时字符串。
第二步,临时字符串的值被赋予"onetwo",
第三步,临时字符串与str的值进行连接,
第四步,把结果赋予str。
不过,通过下面的代码进行优化能够提高执行效率,两个离散表达式直接将内容附加到str上,避免了临时字符串(第一步和第二步),这样做可以使执行速度提高10%~40%;
str += "one";
str += "two";
实际上,也可以用以下一行代码实现同样的性能提高,例如:
str = str + "one" + "two";
也就是说 str要在开头,如str = "one" + str + "two" 就会失去这种优化。
建议36
建议37:推荐使用replace
replace方法同时执行查找和替换两个操作。
var s = "javascript";
var b = s.replace(/(java)(script)/,"$2-$1");
alert(b); // "script-java";
1.$1、$2、...、$99:与正则表达式中的第1~99个子表达式相匹配的文本。
2.$&:与正则表达式相匹配的子字符串。
3.$`:位于匹配字符串左侧的文本。
4.$':位于匹配字符串右侧的文本。
5.$$:表示$符号。
建议37
建议38:正确认识正则表达式工作机制
建议39:正确理解正则表达式回溯
建议40:正确使用正则表达式分组
建议41:正确使用正则表达式引用
建议42:用好正则表达式静态值
建议43:使用exec增强正则表达式功能
建议44:正确使用原子组
建议45:警惕嵌套量词和回溯失控
建议46:提高正则表达式执行效率
建议47:避免使用正则表达式的场景
建议48:慎用正则表达式修剪字符串
建议49:比较数组与对象同源特征
建议50:正则检测数组类型
建议51:理解数组长度的有限性和无限性
建议52:建议使用splice删除数组
var number = ['zero','one','two','three','four','five'];
delete numbers[2];
number = ['zero','one',undefined,'three','four','five']; var number = ['zero','one','two','three','four','five'];
numbers.splice(2,1);
number = ['zero','one','three','four','five']; 这对大型数组来说效率会更高。
建议52
建议53:小心使用数组维度
建议54:增强数组排序的sort功能
//从小到大排序
function f(a,b){
return (a-b)
}
var a = [3,1,2,4,5,7,8,0,9,6];
a.sort(f);
alert(a); // [0,1,2,3,4,5,6,7,8,9]; //从大到小排序
function f(a,b){
return -(a-b)
}
var a = [3,1,2,4,5,7,8,0,9,6];
a.sort(f);
alert(a); // [9,8,7,6,5,4,3,2,1,0]; //根据奇偶性质排列数组 奇数在前
function f(a,b){
var a = a%2;
var b = b%2;
if(a==0){return 1;}
if(b==0){return -1;}
}
var a = [3,1,2,4,5,7,6,8,0,9];
a.sort(f);
alert(a); //[3,1,5,7,9,0,8,6,4,2]; //根据奇偶性质排列数组 偶数在前
function f(a,b){
var a = a%2;
var b = b%2;
if(a==0){return -1;}
if(b==0){return 1;}
}
var a = [3,1,2,4,5,7,6,8,0,9];
a.sort(f);
alert(a); //[0,8,6,4,2,6,8,3,1,5,7,9];
建议54
建议55:不要拘泥于数字下标
var a = [];
a[-1] = 1; //为下标位-1的元素赋值
很明显,上面的用法是非法的。因为这不符合语法规范,使用length属性检查,返回值为0,说明数组并没有增加长度,这是正确的,也是正常的,但是,使用下面的方法可以读取该元素的值。
alert(a.length); // 0
alert(a[-1]);
alert(a["-1"]);
建议55
建议56:使用arguments模拟重载
(第二章)改善JavaScript,编写高质量代码。的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)
编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...
- (第一章)改善JavaScript,编写高质量代码。
根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 编写高质量代码改善python程序91个建议学习01
编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐 ...
- 编写高质量代码改善C#程序的157个建议——建议4: TryParse比Parse好
建议4: TryParse比Parse好 如果注意观察除string外的所有基元类型,会发现它们都有两个将字符串转型为本身的方法:Parse和TryParse.以类型double为例,这两个方法最简单 ...
- 编写高质量代码改善C#程序的157个建议——导航开篇
前言 由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展.打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要 ...
- 编写高质量代码--改善python程序的建议(六)
原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...
- 编写高质量代码--改善python程序的建议(八)
原文发表在我的博客主页,转载请注明出处! 建议四十一:一般情况下使用ElementTree解析XML python中解析XML文件最广为人知的两个模块是xml.dom.minidom和xml.sax, ...
- 编写高质量代码改善java程序的151个建议——导航开篇
2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...
- 编写高质量代码改善C#程序的157个建议[1-3]
原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...
随机推荐
- MyBatis源码解析之数据源(含数据库连接池简析)
一.概述: 常见的数据源组件都实现了javax.sql.DataSource接口: MyBatis不但要能集成第三方的数据源组件,自身也提供了数据源的实现: 一般情况下,数据源的初始化过程参数较多,比 ...
- Spring-全局异常拦截
Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @Controlle ...
- CSS 的介绍
第一章 的介绍 1.CSS:“层叠样式表”,它是cascading style sheets的缩写,作用就是给HTML标签加表现形式(样式-显示),如:字体,图片,列表,位置等. 在浏览器中可以看到部 ...
- Yii 时间戳格式化显示的问题
这个控件是CJuiDatePicker控件的扩展,支持时分秒. 下载地址:http://www.yiiframework.com/extension/timepicker/ 这个控件用在view里的_ ...
- css的元素表现
块级元素和行内元素的表现: 块级元素:块级元素和父元素的宽度一致,默认情况下就是和body的宽度一样,也可以说和浏览器窗口的宽度一致,致使同一行不能再放下另外的元素,所以块级元素表现为独占一行. 块级 ...
- CSS - 伪类和伪元素的区别
伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: CSS伪类 (P ...
- 如何配置Portal 基于AD的单点登录配置
Portal for ArcGIS支持两种类型的账户,分别是: 1.系统内置账户. 2.外部系统的企业账户. 这两种不同的账号分别支持多种身份认证方式: 账号类型 认证方式 细分认证方式 系统内置账号 ...
- idea 忽略显示文件
最后填写的时候,参考原有参数,1.在末尾加分号2.形式为*.xxx
- Automate the Sizing of your SGA in Oracle 10g
How much memory does each of the individual components of the SGA need? Oracle now has methods to de ...
- windows操作系统中安装、启动和卸载memcached
今天总结一下如何在Windows操作系统中安装.启动和卸载memcached:下载地址: http://download.csdn.net/download/wangshuxuncom/8249501 ...