1.利用toString()里面的参数,实现各进制之间的快速转换:

var n = 17;
binary_string = n.toString(2);
//->二进制"10001"
octal_tring = n.toString(8);
//->八进制"021"
hex_string = n.toString(16);
//->十六进制"0x11"

2.parseInt()可以接受第二个可选参数,这个参数是指定数字转换的基数,合法的取值范围是2~36.(进制)

parseInt('11', 2); //->3 (1*2 + 1)
parseInt('ff', 16); //->255 (15*16 + 15)
parseInt('zz', 36); //->1295 (35*36 + 35)
parseInt('077', 8); //->63 (7*8 + 7)
parseInt('077', 10); //->77 (7*10 +7)

3.申明提前(预编译时进行的)

:即JavaScript函数里声明的所有变量(但不涉及赋值)都被‘提前’至函数体的顶部。 在函数体内的局部变量覆盖了同名的全局变量。(JavaScript没有块级作用域)

4.当使用var声明一个变量的时候,这个变量是不可配置的,也就是说这个变量无法通过delete运算符进行删除操作。

5.一元加法(+)和一元减法(-) 一元加法(+):一元加法操作符把操作数转换为数字或者NaN,并返回这个转换后的数字。如果操作数本身就是个数字,则直接返回这个数字。(可用来简单的把‘数字字符串’转换为数字) 一元减法(-):当‘-’用作一元运算符的时候,它会根据需要把操作数转换为数字,然后改变运算结果的符号。

6.NaN和任何值都不想等,包括它本身。

通过X!===X来判断X是否为NaN,只有在X为NaN的时候这个表达式的结果才为true.(用isNaN()来判断一个变量是否为NaN)

7.Infinity (无限大)、-Infinity (无限小)

8.JavaScript实现的几种排序算法。

1>快速排序算法:

/*快速排序法*/
function quickSort(a) {
if (a.length <= 1) {
return a;
}
var midLength = Math.floor(a.length / 2);
var midValue = a.splice(midLength,1);
var left = [];
var right = [];
for (var i = 0; i < a.length; i++) {
if (a[i] < midValue) {
left.push(a[i]);
} else {
right.push(a[i]);
}
}
return quickSort(left).concat(midValue,quickSort(right));
}
console.log(quickSort([1,5,3,6,2,4,0]));

2>冒泡排序算法:

/*冒泡排序法*/
function bubbleSort(a) {
var length = a.length;
var sortArray;
for (var i = 0; i < length-1; i++) {
for (var j = 0; j < length-i-1 ; j++) {
if (a[j] > a[j+1]) {
sortArray = a[j];
a[j] = a[j+1];
a[j+1] = sortArray;
}
}
}
return a;
}
console.log(bubbleSort([2,1,3,6,5,4,7,0]));

3>插入排序算法:

/*插入排序法*/
function insertSort(a) {
var length = a.length;
var sortArray;
for (var i = 1; i < length; i++) {
for (var j = 0; j < i ; j++) {
if (a[i] < a[j]) {
sortArray = a[i];
a[i] = a[j];
a[j] = sortArray;
}
}
}
return a;
}
console.log(insertSort([0,6,5,3,4,2,1,7]));

4>选择排序算法:

/*选择排序法*/
function selectSort(a) {
for (var i = 0; i < a.length; i++) {
var min = a[i];
var k = i;
for (var j = i + 1; j < a.length; j++) {
if (min > a[j]) {
min = a[j];
k = j;
}
}
a[k] = a[i];
a[i] = min;
}
return a;
}
console.log(selectSort([5,1,4,0,3,2,7,6]));

9) 不要在循环内部使用try-catch-finally

try-catch-finally中catch部分在执行时会将异常赋给一个变量,这个变量会被构建成一个运行时作用域内的新的变量。

切忌:

    var object = ['foo', 'bar'], i;
for (i = 0, len = object.length; i < len; i++) {
try {
// do something that throws an exception
}
catch (e) {
// handle exception
}
}

而应该:

  var object = ['foo', 'bar'], i;
try {
for (i = 0, len = object.length; i <len; i++) {
// do something that throws an exception
}
}
catch (e) {
// handle exception
}

10) 使用XMLHttpRequests时注意设置超时

XMLHttpRequests在执行时,当长时间没有响应(如出现网络问题等)时,应该中止掉连接,可以通过setTimeout()来完成这个工作:

    var xhr = new XMLHttpRequest ();
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
clearTimeout(timeout);
// do something with response data
}
}
var timeout = setTimeout( function () {
xhr.abort(); // call error callback
}, 60*1000 /* timeout after a minute */ );
xhr.open('GET', url, true);
xhr.send();

同时需要注意的是,不要同时发起多个XMLHttpRequests请求。

11) 处理WebSocket的超时

通常情况下,WebSocket连接创建后,如果30秒内没有任何活动,服务器端会对连接进行超时处理,防火墙也可以对单位周期没有活动的连接进行超时处理。

为了防止这种情况的发生,可以每隔一定时间,往服务器发送一条空的消息。可以通过下面这两个函数来实现这个需求,一个用于使连接保持活动状态,另一个专门用于结束这个状态。

    var timerId = 0;
function keepAlive() {
var timeout = 15000;
if (webSocket.readyState == webSocket.OPEN) {
webSocket.send('');
}
timerId = setTimeout(keepAlive, timeout);
}
function cancelKeepAlive() {
if (timerId) {
cancelTimeout(timerId);
}
}

keepAlive()函数可以放在WebSocket连接的onOpen()方法的最后面,cancelKeepAlive()放在onClose()方法的最末尾。

12) 注意原始操作符比函数调用快

比如,一般不要这样:

    var min = Math.min(a,b);
A.push(min);

可以这样来代替:

    var min = a < b ? a : b;
A[A.length] = min;

JavaScript小笔记の经典算法等....的更多相关文章

  1. Javascript小笔记

    1.315360000000 毫秒 = 10年 2.Javascript 取时间截: JavaScript 获取当前时间戳: 第一种方法: var timestamp = Date.parse(new ...

  2. javascript学习笔记--经典继承、组合继承、原型式继承、寄生继承以及寄生组合继承

    经典继承 js中实现经典继承的方式是通过构造函数来实现的,即在子类中对父类调用call方法. function Geometric() { this.time = ""; this ...

  3. javascript常用经典算法实例详解

    javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...

  4. 数据结构与算法JavaScript (五) 串(经典KMP算法)

    KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配 ...

  5. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  6. [经典算法题]寻找数组中第K大的数的方法总结

    [经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26   字体:[大 中 小] 打印复制链接我要评论   今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...

  7. JavaScript实现10大算法可视化

    参考博客: https://www.cnblogs.com/Unknw/p/6346681.html#4195503 十大经典算法 一张图概括: 名词解释: n:数据规模 k:“桶”的个数 In-pl ...

  8. Atitit 图像处理30大经典算法attilax总结

    Atitit 图像处理30大经典算法attilax总结 1. 识别模糊图片算法2 2. 相似度识别算法(ahash,phash,dhash)2 3. 分辨率太小图片2 4. 横条薯条广告2 5. 图像 ...

  9. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

随机推荐

  1. Android UI:机智的远程动态更新策略

    问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...

  2. 转载:遍历Map的四种方法

    http://www.cnblogs.com/kristain/articles/2033566.html 遍历Map的四种方法 public static void main(String[] ar ...

  3. unicode下各种类型转换CString、string

    把最近用到的各种unicode下类型转换总结了一下: 1.string转CString string a=”abc”; CString str=CString(a.c_str()); 或str.for ...

  4. Oracle core05_事务和一致性

    事务和一致性 oracle的redo和undo机制保证了数据库的ACID特性,以及高性能和可恢复特性. redo的数据是记录着数据块变更的顺序的正向数据流, commit时,保证redo同步持久化,保 ...

  5. Ehcache Java开源缓存框架

    一.ehcache.xml 配置详解 单机配置: <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

  6. 【Android 复习】:Android五种布局的使用方法

    ---恢复内容开始--- 在Android布局中,有五种常用的布局,下面我们就来学习一下这几种布局的使用方式 1) 线性布局:LinearLayout 2) 帧布局:  FrameLayout 3)  ...

  7. JavaScript---网络编程(12)--DHTML技术演示(5)-form表单验证技术(正则)

    这里不进行很复杂的后台验证以及JavaScript的正则表达式,只是简单的介绍下这个技术,简单的后台接收与跳转,大概了解怎么验证的就可以.具体的技术,我后面还会继续写博客的.本人也还在学习中. 表单验 ...

  8. Get familiar with key Frameworks of ios

    Frameworks make your life easier as an iOS Developer. They allow you to reuse code written by other ...

  9. PC-网络教程之宽带小型组网方案

    由于某些家庭或小型局域网用户的各种需求和设备不同,所以继续写出几个组网方案让大家参考参考.如有错误之处,欢迎大家多多指点. 1,用网桥实现增加接入点(比如你有5台机子要上网,而你的小型路由只有4个接口 ...

  10. weblogic开发模式与生产模式介绍

    weblogic开发模式与生产模式介绍 开发模式:该模式启用自动部署 生产模式:该模式关闭自动部署 weblogic server 三种部署方法:自动部署.控制台部署.命令部署 自动部署:当其处于启用 ...