来源:互联网 发布:js 设置div class 编辑:程序博客网 时间:2024/04/25 09:04

readyState的五个状态

0 初始化
1 载入
2 载入完成
3 交互
4 完成

自定义事件

var Event = {    _listeners: {},        // 添加    addEvent: function(type, fn) {        if (typeof this._listeners[type] === "undefined") {            this._listeners[type] = [];        }        if (typeof fn === "function") {            this._listeners[type].push(fn);        }            return this;    },    // 触发    fireEvent: function(type) {        var arrayEvent = this._listeners[type];        if (arrayEvent instanceof Array) {            for (var i=0, length=arrayEvent.length; i<length; i+=1) {                if (typeof arrayEvent[i] === "function") {                    arrayEvent[i]({ type: type });                    }            }        }            return this;    },    // 删除    removeEvent: function(type, fn) {        var arrayEvent = this._listeners[type];        if (typeof type === "string" && arrayEvent instanceof Array) {            if (typeof fn === "function") {                // 清除当前type类型事件下对应fn方法                for (var i=0, length=arrayEvent.length; i<length; i+=1){                    if (arrayEvent[i] === fn){                        this._listeners[type].splice(i, 1);                        break;                    }                }            } else {                // 如果仅仅参数type, 或参数fn邪魔外道,则所有type类型事件清除                delete this._listeners[type];            }        }        return this;    }};

最大深度

int MaxDepth ( TreeNode* root ) {    int depth = 0;    if ( root ) {        int ldepth = MaxDepth ( root -> left );        int rdepth = MaxDepth ( root -> right );        depth = ( ldepth > rdepth ) ? ldepth + 1 : rdepth + 1;    }    return depth;}

最小深度

int MinDepth(TreeNode* root) {    if (root == nullptr) return 0;    int l = MinDepth(root->left);    int r = MinDepth(root->right);    if (l==0 || r==0) { return l+r+1; }    return (l<r?l:r)+1;}

堆排序

function AdjustHeap(arr, pos, len){   var swap = arr[pos];      //保存当前节点   var child = pos * 2 + 1;  //定位到当前节点的左边的子节点   while(child < len){       //递归遍历所有的子节点       //判断当前节点是否有右节点,若右节点较大,就采用右节点和当前节点进行比较       if(child + 1 < len && arr[child] < arr[child + 1]){           child += 1;       }       //比较当前节点和最大的子节点,小于就交换,交换后将当前节点定位到子节点上       if(arr[pos] < arr[child]){           arr[pos] = arr[child];           pos = child;           child = pos * 2 + 1;       }       else{           break;       }       arr[pos] = swap;   }}/* 构建堆:* 满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子结点的关键字。* 实现:从最后一个拥有子节点的节点开始,将该节点和其他节点进行比较,将最大的数交换给该节点,*      交换后再依次向前节点进行相同的交换处理,直到构建出大顶堆。*/function BuildHeap(arr){ for(var i=arr.length/2; i>=0; i--){  //构建打顶堆    console.log(i)     AdjustHeap(arr, i, arr.length); }}/*堆排序算法*/function HeapSort(arr){   BuildHeap(arr); //构建堆   for(var i=arr.length-1; i>0; i--){   //从数组的尾部进行调整       var swap = arr[i];  //堆顶永远是最大的元素,将堆顶和尾部元素交换,最大元素就保存在尾部,并且不参与后面的调整       arr[i] = arr[0];       arr[0] = swap;       AdjustHeap(arr, 0, i); //将最大的元素进行调整,将最大的元素调整到堆顶   }}var arr = [46,12,33,72,68,19,80,33,9];console.log('before: ' + arr);HeapSort(arr);console.log(' after: ' + arr);

document.compatMode

BackCompat:标准兼容模式关闭。CSS1Compat:标准兼容模式开启。当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。浏览器客户区高度、滚动条高度、滚动条的Left、滚动条的Top等等都是上面的情况。一个准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top的代码:if (document.compatMode == "BackCompat") {    cWidth = document.body.clientWidth;    cHeight = document.body.clientHeight;    sWidth = document.body.scrollWidth;    sHeight = document.body.scrollHeight;    sLeft = document.body.scrollLeft;    sTop = document.body.scrollTop;}else { //document.compatMode == "CSS1Compat"    cWidth = document.documentElement.clientWidth;    cHeight = document.documentElement.clientHeight;    sWidth = document.documentElement.scrollWidth;    sHeight = document.documentElement.scrollHeight;    sLeft = document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft;    sTop = document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop;}

不使用第三个变量交换两个变量

方法1,算术运算(加减):x=x+y; //x暂存两数之和y=x-y; //y为两数之和减去y,即原来的xx=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y方法2,逻辑运算(异或):x^=y;//x先存x和y两者的信息y^=x;//保持x不变,利用x异或反转y的原始值使其等于x的原始值x^=y;//保持y不变,利用x异或反转y的原始值使其等于y的原始值

addEventListener和onclick

addEventListener注册的事件不会被覆盖,而onclick会被覆盖

encodeURI和encodeURIComponent和escape

encodeURI:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
encodeURIComponent:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
escape:该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

原创粉丝点击