JS 乱记
- JS 中不存在块级作用域,也就是说在全局作用域下 if ,for 语句中用 var 声明的变量是全局变量。
- JS 中浮点数运算的值为近似值,比如:0.1 + 0.2 不等于 0.3 ,所以避免使用浮点数来进行比较。
- NaN != NaN ,NaN == undefined ,NaN !== undefined。
- 使用 undefined 或者 null 与数值进行比较时,undefined 转换为数值 NaN ,null 转换为数值 0。
- 在 if ,for 等条件语句中进行条件判断时,会将值转换为布尔值再判断;而在相等运算符(==)中进行比较时,大多数情况是将值转换为数值来比较。当字符串与字符串对象进行比较时,将对象转换为字符串来比较,只有当字符串与字符串比较时,才比较字符串值。
- 对象转换为字符串时,会先调用对象的 toString() 方法,如果转换不了,便会接着调用 valueOf() 方法,非数值返回 NaN。对象转换为数值时,先调用 valueOf() 方法,再调用 toString() 方法。
- 用逻辑运算符进行赋值时(根据短路的特性,短路返回左值,否则返回右值)会返回数据转换之前的值。如:var a = 1 || 2 此时 a 等于 1 ,而不是等于 true 。
- 如果一个变量在声明之后没有赋值,它的值是 undefined 。对同一变量重复进行声明(不赋值),并不会改变原有的值(返回原值)。引用一个未被声明的变量会报错(ReferenceError)。访问不存在的属性,值为 undefined ,访问 undefined 会报错。比如:var x = {}; x.y;/* undefined */ x.y.z;//TypeError。
- 字符串是不可变类型。
- window 属性既是全局对象的属性,又是全局对象的引用。
- 调用构造函数时,会隐式的 return this ,也就是说会隐式的返回一个对象。如果显式的 return 一个对象,那么会将这个对象作为返回值(忽略本该返回的对象)。如果 return 的是一个基本类型的值(比如数值),会被无视,从而返回原本的对象。若无特殊要求,建议避免在构造函数使用 return 语句。
- delete 操作符不能删除用 var 显式声明的变量,也不能删除从原型继承而来的成员(删除原型来的成员会返回 true 值,看起来好像真的成功删除了),但可以删除隐式声明(不使用 var)的变量(估计没人会这么做吧)。
- 因为变量会提升至所在作用域的顶端,为了避免出错,建议一开始便把变量都声明在作用域顶端。这样做只使用一个 var 就可以了,顺便节约了些字节(好稀罕)。
- 枚举对象推荐使用 for in 或 for each in 语句,枚举数组推荐使用 for 循环。特殊情况例外。
- 当使用 new 操作符来创建一个数组时(new Array()),传递一个参数且为数值时,它的含义是数组的长度,比如 new Array(5);// 创建 length 为 5 的数组 。2 个参数以上时,认作数组的元素。
- 复制数组时,有深复制和浅复制两种。深复制是一种完全的复制,如果该对象的属性还引用了其它对象,则那些对象也会一起被复制。而浅复制则只会复制属性值以及元素值,并不会复制相关的引用对象。通过 从 concat()方法 以及 slice() 方法进行的复制都是浅复制。
- document.getElementById() 是只存在于 Document 对象的方法。ducoment.getElementsByTagName() 则是同时存在于 Document 对象 与 Element 对象的方法。通俗点来说,getElementsByTagName() 方法既可以从文档中遍历查找 (document.getElementsByTagName()),也可以从某个元素中遍历查找(div.getElementsByTagName())。
- getElementsByTagName() 方法获得的对象是一个 NodeList 对象,不是一个单纯的节点对象的数组。而 NodeList 对象的一大特征就是它是一个 Live 对象,Live 对象的特点与数组的 length 属性相似,所以当为页面增加某个节点时,不用再次调用 getElementsByTagName() 方法来获得新的节点列表。
- 使用 firstChild 等节点方法来获得元素节点时,当小心空白符也会作为文本节点来处理。获得元素节点更直接的方法就是使用元素节点方法,如:firstElementChild() 等方法。
- 通过 querySelectorAll() 方法取得的对象不同于通过 getElementsByTagName() 方法或 childNodes 属性等方式所取得的 NodeList 对象,通过 querySelectorAll() 方法取得的是一个 staticNodeList 对象,它们的区别在于,更改对象之后是否会将该更改反映于 HTML 文档中,顾名思义,当你在页面添加某个节点时,需要再次调用 querySelectorAll() 方法来获得新的节点列表。
- 如果事件处理程序返回 false 值,则会取消该事件的默认行为(比如提交表单时,返回 false 值会阻止提交)。
- 通过在 HTML 标签中(<button onclick="">)或在 DOM 元素中(btn.onclick = function (){}) 只能添加一个事件操作。想要多添加几个事件得使用 addEventListener() 方法(在 IE 中使用 attachEvent())。
- 一般情况,在事件处理程序中的 this 所引用的对象是设定了该事件处理程序的元素。
小结:这是俺阅读《JavaScript编程全解》时所断断续续写下来的一些比较基础的笔记。花了 5 天时间, 终于将前面基础的 200 多页慢慢(龟速)的看完(后面的都是些什么 JQery, HTML5, node.js 之类的),此番复习,收获甚微。鸡肋啊鸡肋,食之无肉,弃之不舍。好了,见笑了!如果上面有出错的地方,请诸位不吝赐教。
JS 乱记的更多相关文章
- javascript专题系列--js乱序
乱序的意思想必没有不知道:就是将数组打乱. 听到乱序一般都会想到js的随机函数Math.random(); var values = [1, 2, 3, 4, 5]; values.sort(func ...
- Node.js 随记
http://nodejs.org/ 下载并安装 node.js 最新版本 运行cmd,输入npm install xxxxxx 回车,安装扩展模块,如:express,socket.io等 运行c ...
- HTML5 乱记
HTML5 的文档类型声明可以触发所有具备标准模式的浏览器的标准模式,包括那些对 HTML5 一无所知的浏览器,也就是说,可以在任何网页中都使用 HTML5 文档类型声明 <!DOCTYPE h ...
- nw.js桌面程序自动更新(node.js表白记)
Hello Google Node.js 一个基于Google V8 的JavaScript引擎. 一个伟大的端至端语言,或许我对你的热爱源自于web这门极富情感的技术吧! 注: 光阴似水,人生若梦, ...
- AngularJS 乱记
1. 前端简单逻辑 <title data-ng-bind="{true:' ('+notice_count+') '}[notice_count > 0]+{true:glob ...
- js到记时代码
原文地址:http://www.w3school.com.cn/tiy/t.asp?f=hdom_timing_infinite html><head><script type ...
- JS 随记
一.在内联框架中,刷新整个框架,在.net中使用此方法( ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "re ...
- Vue.js中记不住 的东西
给样式背景赋值: :style="{backgroundImage:'url(' + otherInfo.head_image + ')'}" <img :src=" ...
- JS典记
var href = ""; //遍历a标签 $ ( "a"). each (function () { href = ...
随机推荐
- 7.OpenACC
OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...
- Hello,Ubuntu(安装过程中遇到的问题及解决)
2013-02-23 不折腾不舒服(>_<).在虚拟机上运行Ubuntu程序一多就明显卡顿,感觉效率不高.为了流畅使用Ubuntu,也便于将来学习Vim/Emacs,我决定在笔记本的Win ...
- 1N系列稳压二极管参数
1N系列稳压二极管参数 型号 稳定电压 型号 稳定电压 型号 稳定电压 1N5236 7.5 1N5738 12 1N6002 12 1N5237 8.2 1N5739 13 1N6003 13 1N ...
- hdoj 1863 畅通工程
并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- nyoj 17 单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- 使用ApplicationLoader中出现报错:The IPA is invalid. It does not inlude a Payload directory
问题处理方法: 1.将achieve的.app后缀的软件包放在一个payload的文件夹中 2.压缩该文件夹,改变.zip后缀为.ipa 3.使用applicationLoader上传该文件
- 实现windows和linux互传文件
http://www.cnblogs.com/ylan2009/archive/2012/01/12/2321126.html 尝试从windows xp向ubuntu11.10传文件 ubuntu使 ...
- TFS上使用Beyond Compare来比较源码
In Visual Studio, go to the Tools menu, select Options, expand Source Control, (In a TFS environment ...
- C#实现在Winform中嵌入Word和Excel
http://www.cnblogs.com/wuzi145/archive/2012/05/08/2490680.html 在此只是介绍一个简单控件:dsoframer.ocx的使用,这个控件需要通 ...