JavaScript小笔记の经典算法等....

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;
时间: 2024-10-10 05:57:37

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

JavaScript小笔记

function test1 () {    console.log('test1'); } function test2 () {    console.log('test2'); } function test3 (test3) {    console.log(test3); } function start(type){     var arr=[test1,test2,test3];     var op=arr[type]     if (op) op(123); } start(2

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要

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

数据结构与算法JavaScript (五) 串(经典KMP算法) KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上蛋疼的KMP是讲解很多,基本都是走的高大上路线看的你也是一头雾水,我试

十大经典算法总结

Damonare 20小时前 十大经典算法总结(JavaScript描述) 前言 读者自行尝试可以想看源码戳这,博主在github建了个库,欢迎star.读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界上总存在着那么一些看似相似但有完全不同的东西,比如雷锋和雷峰塔,小平和小平头,玛丽和马里奥,Java和javascript.... 当年javascript为了抱Java大腿恬不知耻的让自己变成了Java的干儿

机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法

摘要 聚类是一种无监督的学习(无监督学习不依赖预先定义的类或带类标记的训练实例),它将相似的对象归到同一个簇中,它是观察式学习,而非示例式的学习,有点像全自动分类.说白了,聚类(clustering)是完全可以按字面意思来理解的--将相同.相似.相近.相关的对象实例聚成一类的过程.机器学习中常见的聚类算法包括 k-Means算法.期望最大化算法(Expectation Maximization,EM,参考"EM算法原理").谱聚类算法(参考机器学习算法复习-谱聚类)以及人工神经网络算法

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

[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家. 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题.

JavaScript实现10大算法

在传统的计算机算法和数据结构领域,大多数专业教材和书籍的默认语言都是Java或者C/C+ +.当我了解到有一本叫做<数据结构与算法JavaScript描述>时,觉得它是一本很好的针对前端开发者们的入门算法书籍.有一个问题是,很多重要的算法和数据结构知识并没有在这本书里被提到.这些问题对于作为一个晚期强迫症患者的我来说简直不能忍.于是乎,一言不合我就决定自己找资料总结算法.那么,我就从算法领域里最基础的知识点——排序算法总结起好了. 十大经典算法概括图 名词解释: n:数据规模 k:“桶”的个数

数据挖掘十大经典算法

一. C4.5  C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3 算法.   C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2) 在树构造过程中进行剪枝: 3) 能够完成对连续属性的离散化处理: 4) 能够对不完整数据进行处理. C4.5算法有如下优点:产生的分类规则易于理解,准确率较高.其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导

动态展示十大经典算法

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divideandconquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1.从数列中挑出一个元素,称为“基准”(pivot),