示例1:

var abc;

console.log(abc === undefined);
        console.log(abc === null);
        console.log(typeof abc === undefined);
        console.log(typeof abc === 'undefined');

    =>  true;

    =>  false;

   =>  false;

    =>  true;

示例2:

var ceshi = document.getElementById('ceshi');
        ceshi.abc = '1111';
        var abc = '2222';
        function ceshiListener() {
            alert(this.abc);
        }
        ceshi.addEventListener('click', ceshiListener, false);

=>  1111

PS:测试结果,在W3C标准中,侦听器的this的执行环境为被侦听对象。

示例3:

var ceshi = document.getElementById('ceshi');
        ceshi.abc = '1111';
        var abc = '2222';
        function ceshiListener() {
            alert(this.abc);
        }
        ceshi.attachEvent('onclick', ceshiListener);

=>  2222

PS:测试结果,在IE10及以下版本中,侦听器的this的执行环境为window。但在IE11中已不支持attachEvent。

示例4:

指定MSIE标准的事件侦听器中this的执行环境,解决示例3中的问题。

要素:1、将原函数传递给被侦听节点对象某成员。2、注意MSIE标准,不自动传递事件对象window.event给侦听器

示例代码:

node['abc'] = listener;  //改变this执行环境

node['delegate'] = function () {

node['abc'](window.event);  //针对IE不自动传递事件对象给侦听器

};

node.attachEvent('onclick', node['delegate']);

示例5:

var ceshi = 1;
        function abc(ceshi) {//传入的参数名为特殊的局部变量
            ceshi = 2;  //局部变量
            alert(ceshi);
        }
        abc();
        alert(ceshi);

=>  2

=>  1

PS:传入同名参数,可截断作用域链。不影响上级变量,上级变量也不自动传入。

示例6:

全局替换

var a = 'dede';
        var b = a.replace(/d/g, '-');
        alert(a);
        alert(b);

=>  dede

=>  -e-e

示例7:

关于转义

字符串中,一个\代表转义,单个\可直接忽视。两个\\,输出\。转义不能转义的字符时,转义失败,但\并不输出。

正则表达式中,一般情况下,对于-,转义字符\,可加可不加,出于良好的语义,最好加上。

示例代码:

var abc = 'my\-class\-abc';
        var ceshi = abc.replace(/\-/g, '\\-');
        alert(abc);
        alert(ceshi);

=>  my-class-abc

=>  my\-class\-abc

var abc = 'my-class-abc';
        var ceshi = abc.replace(/\-/g, '\\-');
        alert(abc);
        alert(ceshi);

=>  my-class-abc

=>  my\-class\-abc

var abc = 'my\-class\-abc';
        var ceshi = abc.replace(/-/g, '\\-');
        alert(abc);
        alert(ceshi);

=>  my-class-abc

=>  my\-class\-abc

示例8:

改变函数执行环境

示例代码:

function changeFuncEnv(obj, func) {

return function () {//不用function包装,会立刻执行func函数。且不可接受自定义参数。

func.apply(obj, arguments);

}

}

示例9:

得到浏览器宽高

示例代码:

function getBorwerSize() {
            var w3cDom = document.documentElement;
            return {
                'width': window.innerWidth || (w3cDom && w3cDom.clientWidth) || document.body.clientWidth,
                'height': window.innerHeight || (w3cDom && w3cDom.clientHeight) || document.body.clientHeight
            };
        }

示例10:

基本的nodeType

ELEMENT_NODE: 1,
        ATTRBUTE_NODE: 2,
        TEXT_NODE: 3,
        CDATA_SECTION_NODE: 4,
        ENTITY_REFERENCE_NODE: 5,
        ENTITY_NODE: 6,
        PROCESSING_INSTRUCTION_NODE: 7,
        COMMENT_NODE: 8,
        DOCUMENT_NODE: 9,
        DOCUMENT_TYPE_NODE: 10,
        DOCUMENT_FRAGMENT_NODE: 11,
        NOTATION_NODE: 12

示例11:

线性遍历节点

function walkDOMLinear(node, func) {
            node = node || doucment;
            var nodes = node.getElementsByTagName('*');
            for (var i = 0; i < nodes.length; i++) {
                func.call(nodes[i]);
            }
        }

示例12:

深度递归遍历节点

function walkDOMRecursive(node, depth, func) {
            var root = node || window.document;
            var node = root.firstChild;
            func.call(root, depth++);
            if (node) {
                walkDOMRecursive(node, depth, func);
                node = node.nextSibling;
            }
        }

示例13:

深度递归遍历节点属性(未验证)

function walkDOMAttrRecursive(node, depth, func) {
            var root = node || window.document;
            var node = root.firstChild;
            if (root.attributes) {
                for (var i = 0; i < root.attributes.length; i++) {//将属性节点视为普通节点,遍历
                    func(root.attributes[i], depth);
                }
            }

    depth++;
            while (node) {
                walkDOMAttrRecursive(node, depth, func);
                node = node.nextSibling;
            }
        }

2015-02-07——js笔记的更多相关文章

  1. [2017.02.07] Lua入门学习记录

    #!/home/auss/Projects/Qt/annotated/lua -- 这是第一次系统学习Lua语言 --[[ 参考资料: 1. [Lua简明教程](http://coolshell.cn ...

  2. 02: vue.js常用指令

    目录:Vue其他篇 01: vue.js安装 02: vue.js常用指令 目录: 1.1 vuejs简介 1.2 选择器:根据id.class等查找 1.3 静态绑定数据 data 1.4 插值 { ...

  3. Data Visualization and D3.js 笔记(1)

    课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...

  4. js笔记-0

    #js笔记-0 数组: indexOf方法: Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']; arr.indexO ...

  5. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  6. Node.js 笔记02

    一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...

  7. 2015年10月23日JS笔记

    ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...

  8. JS笔记—02

    1.String截取:substr:截几位, substring:截到哪. 2.String的操作,例如变大写,小写,本身不会变,只是在栈里交换引用似的 var str = "hello w ...

  9. Node.js笔记07——不使用generator自定义一个项目,深入了解项目结构

    一.初始化项目 新建项目 git init manager 新建view文件夹,建几个静态文件夹 新建app.js 快速初始化项目依赖 npm init -y 安装express npm instal ...

  10. iOS 学习笔记 二 (2015.02.26)

    How To Use Git Source Control with Xcode in iOS 6 If you're new here, you may want to subscribe to m ...

随机推荐

  1. 一个简单的MariaDB认证插件demo

    代码地址如下:http://www.demodashi.com/demo/13076.html 一.前言 众所周知(其实可能很多人不知道)MariaDB支持插件认证.在MariaDB中新建用户,常见的 ...

  2. 调用腾讯QQ启动

    http://wpa.qq.com/msgrd?v=3&uin=88888888&site=qq&menu=yes

  3. scrollTop()--返回或设置匹配元素的滚动条的垂直位置

    scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置. scroll top offset 指的是滚动条相对于其顶部的偏移. 如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移. ...

  4. 自己动手开发更好用的markdown编辑器-04(实时预览)

    这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/   程序打包   文章目录 1. 打开新窗口 ...

  5. LVM详解笔记pv-vg-lv创建和扩展

    LVM Logical Volume Manager(逻辑卷管理) 是Linux环境下对底层磁盘的一种管理机制(方式),处在物理磁盘和文件系统之间. 名词: PV (Physical Volume)物 ...

  6. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正 ...

  7. swoole-1.7.18 版本已发布,支持 PHP7

    swoole-1.7.18 版本已发布,支持 PHP7 matyhtf 发布于: 2015年07月23日 (22评) 分享到:    收藏 +16 3月19日,深圳源创会火热报名中,go>> ...

  8. obj-fit

    该 object-fit CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. 初始值 fill 适用于 替换元素 遗传 是 媒体 视觉 计算值 按规定 动画类型 离散的 为了规范 ...

  9. vue 事件处理器

    事件处理器 1.监听事件 可以用v-on指令监听DOM事件来触发一些js代码. 2.方法事件处理器 许多事件处理的逻辑都很复杂,所以直接把js代码写在v-on指令中是不可行的.因此v-on可以接受一个 ...

  10. js弹窗效果实现

    1.首先准备好要弹出的内容,一般用ajax向后台请求数据,组装成html: 主页:a.html,含有div: <div class="cms-window cms-window-oth ...