1. JS 中不存在块级作用域,也就是说在全局作用域下 if ,for 语句中用 var 声明的变量是全局变量。
  2. JS 中浮点数运算的值为近似值,比如:0.1 + 0.2 不等于 0.3 ,所以避免使用浮点数来进行比较。
  3. NaN != NaN ,NaN == undefined ,NaN !== undefined。
  4. 使用 undefined 或者 null 与数值进行比较时,undefined 转换为数值 NaN ,null 转换为数值 0。
  5. 在 if ,for 等条件语句中进行条件判断时,会将值转换为布尔值再判断;而在相等运算符(==)中进行比较时,大多数情况是将值转换为数值来比较。当字符串与字符串对象进行比较时,将对象转换为字符串来比较,只有当字符串与字符串比较时,才比较字符串值。
  6. 对象转换为字符串时,会先调用对象的 toString() 方法,如果转换不了,便会接着调用 valueOf() 方法,非数值返回 NaN。对象转换为数值时,先调用 valueOf() 方法,再调用 toString() 方法。
  7. 用逻辑运算符进行赋值时(根据短路的特性,短路返回左值,否则返回右值)会返回数据转换之前的值。如:var a = 1 || 2 此时 a 等于 1 ,而不是等于 true 。
  8. 如果一个变量在声明之后没有赋值,它的值是 undefined 。对同一变量重复进行声明(不赋值),并不会改变原有的值(返回原值)。引用一个未被声明的变量会报错(ReferenceError)。访问不存在的属性,值为 undefined ,访问 undefined 会报错。比如:var x = {}; x.y;/* undefined */ x.y.z;//TypeError。
  9. 字符串是不可变类型。
  10. window 属性既是全局对象的属性,又是全局对象的引用。
  11. 调用构造函数时,会隐式的 return this ,也就是说会隐式的返回一个对象。如果显式的 return 一个对象,那么会将这个对象作为返回值(忽略本该返回的对象)。如果 return 的是一个基本类型的值(比如数值),会被无视,从而返回原本的对象。若无特殊要求,建议避免在构造函数使用 return 语句。
  12. delete 操作符不能删除用 var 显式声明的变量,也不能删除从原型继承而来的成员(删除原型来的成员会返回 true 值,看起来好像真的成功删除了),但可以删除隐式声明(不使用 var)的变量(估计没人会这么做吧)。
  13. 因为变量会提升至所在作用域的顶端,为了避免出错,建议一开始便把变量都声明在作用域顶端。这样做只使用一个 var 就可以了,顺便节约了些字节(好稀罕)。
  14. 枚举对象推荐使用 for in 或 for each in 语句,枚举数组推荐使用 for 循环。特殊情况例外。
  15. 当使用 new 操作符来创建一个数组时(new Array()),传递一个参数且为数值时,它的含义是数组的长度,比如 new Array(5);// 创建 length 为 5 的数组 。2 个参数以上时,认作数组的元素。
  16. 复制数组时,有深复制和浅复制两种。深复制是一种完全的复制,如果该对象的属性还引用了其它对象,则那些对象也会一起被复制。而浅复制则只会复制属性值以及元素值,并不会复制相关的引用对象。通过 从 concat()方法 以及 slice() 方法进行的复制都是浅复制。
  17. document.getElementById() 是只存在于 Document 对象的方法。ducoment.getElementsByTagName() 则是同时存在于 Document 对象 与 Element 对象的方法。通俗点来说,getElementsByTagName() 方法既可以从文档中遍历查找 (document.getElementsByTagName()),也可以从某个元素中遍历查找(div.getElementsByTagName())。
  18. getElementsByTagName() 方法获得的对象是一个 NodeList 对象,不是一个单纯的节点对象的数组。而 NodeList 对象的一大特征就是它是一个 Live 对象,Live 对象的特点与数组的 length 属性相似,所以当为页面增加某个节点时,不用再次调用 getElementsByTagName() 方法来获得新的节点列表。
  19. 使用 firstChild 等节点方法来获得元素节点时,当小心空白符也会作为文本节点来处理。获得元素节点更直接的方法就是使用元素节点方法,如:firstElementChild() 等方法。
  20. 通过 querySelectorAll() 方法取得的对象不同于通过 getElementsByTagName() 方法或 childNodes 属性等方式所取得的 NodeList 对象,通过 querySelectorAll() 方法取得的是一个 staticNodeList 对象,它们的区别在于,更改对象之后是否会将该更改反映于 HTML 文档中,顾名思义,当你在页面添加某个节点时,需要再次调用 querySelectorAll() 方法来获得新的节点列表。
  21. 如果事件处理程序返回 false 值,则会取消该事件的默认行为(比如提交表单时,返回 false 值会阻止提交)。
  22. 通过在 HTML 标签中(<button onclick="">)或在 DOM 元素中(btn.onclick = function (){}) 只能添加一个事件操作。想要多添加几个事件得使用 addEventListener() 方法(在 IE 中使用 attachEvent())。
  23. 一般情况,在事件处理程序中的 this 所引用的对象是设定了该事件处理程序的元素。

小结:这是俺阅读《JavaScript编程全解》时所断断续续写下来的一些比较基础的笔记。花了 5 天时间, 终于将前面基础的 200 多页慢慢(龟速)的看完(后面的都是些什么 JQery, HTML5, node.js 之类的),此番复习,收获甚微。鸡肋啊鸡肋,食之无肉,弃之不舍。好了,见笑了!如果上面有出错的地方,请诸位不吝赐教。

JS 乱记的更多相关文章

  1. javascript专题系列--js乱序

    乱序的意思想必没有不知道:就是将数组打乱. 听到乱序一般都会想到js的随机函数Math.random(); var values = [1, 2, 3, 4, 5]; values.sort(func ...

  2. Node.js 随记

    http://nodejs.org/  下载并安装 node.js 最新版本 运行cmd,输入npm install xxxxxx 回车,安装扩展模块,如:express,socket.io等 运行c ...

  3. HTML5 乱记

    HTML5 的文档类型声明可以触发所有具备标准模式的浏览器的标准模式,包括那些对 HTML5 一无所知的浏览器,也就是说,可以在任何网页中都使用 HTML5 文档类型声明 <!DOCTYPE h ...

  4. nw.js桌面程序自动更新(node.js表白记)

    Hello Google Node.js 一个基于Google V8 的JavaScript引擎. 一个伟大的端至端语言,或许我对你的热爱源自于web这门极富情感的技术吧! 注: 光阴似水,人生若梦, ...

  5. AngularJS 乱记

    1. 前端简单逻辑 <title data-ng-bind="{true:' ('+notice_count+') '}[notice_count > 0]+{true:glob ...

  6. js到记时代码

    原文地址:http://www.w3school.com.cn/tiy/t.asp?f=hdom_timing_infinite html><head><script type ...

  7. JS 随记

    一.在内联框架中,刷新整个框架,在.net中使用此方法( ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "re ...

  8. Vue.js中记不住 的东西

    给样式背景赋值: :style="{backgroundImage:'url(' + otherInfo.head_image + ')'}" <img :src=" ...

  9. JS典记

        var href = "";     //遍历a标签     $ ( "a"). each (function () {         href = ...

随机推荐

  1. NOIP2003 传染病控制

    题四     传染病控制 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完 全认 ...

  2. 关于Java Collections API您不知道的5件事,第2部分

    注意可变对象 java.util 中的 Collections 类旨在通过取代数组提高 Java 性能.如您在 第 1 部分 中了解到的,它们也是多变的,能够以各种方 式定制和扩展,帮助实现优质.简洁 ...

  3. 【推荐】JavaScript的那些书

    又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些,结果未从我所愿呐,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习J ...

  4. 远程测试mysql数据库3306端口报错

    错误现象:[root@localhost ~]# telnet 192.168.10.130 3306Trying 192.168.10.130...Connected to 192.168.10.1 ...

  5. C++学习笔记(九):作用域和命名空间

    作用域 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域).变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号.也就是说,作用域由变 ...

  6. MySQL 约束

    MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息: 约束主要完成对数据的检验,保证数据库数据的完整性:如果有相互依赖数据 ...

  7. ecshop后台admin文件夹任意更改名

    为了ecshop网站安全起见或不想泄露后台的路径,那么我们必须修改后台admin文件夹名称. 方法和步骤如下: 把原admin文件夹名改成edait为例来说明 首先,把商城根目录下的admin文件夹重 ...

  8. linux系统基础(二)

    磁盘管理(一) Linux设备认识 /dev/cdrom /dev/sr0 /dev/mouse /dev/sda /dev/hda IDE硬盘(支持4块):hd(a-d) [非IDE硬盘]SCSI硬 ...

  9. JFinal tomcat配置根路径(包括windows和linux)

    http://my.oschina.net/u/173975/blog/350666 jfinal的demo直接部署到tomcat上,会由于路径问题导致资源加载不到,路径跳转不正确等问题,解决办法如下 ...

  10. ios中UIButton选中状态切换

    关于UIButton的事件枚举有许多,平时用的少所以很多的都不是很清楚,今天了解了下,看了以前的代码,觉得在UIButton选中时操作写了许多冗余代码,而忽略了UIButton一个很重要的属性,如下: ...