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. MATLAB将批量的图片保存为mat文件

    clc; clear all; num = 10; for i = 1 : num IM = imread(sprintf('E:\\TEST\\PtzTEST2015-8-9\\image1280x ...

  2. Kooboo中如何切换数据库(注意:如果切换数据库,需要Kooboo中没有一个website 否则会报错数据库中没有表之类的)

    Setup database provider 来自Kooboo document   Kooboo CMS can almost support all the types of database, ...

  3. 教程-Supports判断接口(Instance)是否支持

    function TCommandEnabledController.GetCommandVisible(const ACommandName: string): Boolean; var I: In ...

  4. iOS开发 autoResizingMask使用

    autoResizingMask 是UIView的一个属性,在一些简单的布局中,使用autoResizingMask,可以实现子控件相对于父控件的自动布局. autoResizingMask 是UIV ...

  5. Attribute特性验证模型model

    数据验证我们往往分为前台验证和后台验证,而我们的后台验证每到一个方法中就要去验证一次,这样的代码想想都难以维护,这篇我们这篇文章就是为了解决这样的问题.用attribute 这个特性来解决这样的问题 ...

  6. ecshop去官方化的修改

    1:如何修改网站"欢迎光临本店" 回答:languages\zh_cn\common.php文件中, $_LANG['welcome'] = '欢迎光临本店';将他修改成你需要的字 ...

  7. 远程重启IIS服务

    方法一: $UserName = "administrator" $serverpass = "pass" $server = "10.4.19.60 ...

  8. Android AndroidManifest 清单文件以及权限具体解释

    每一个Android应用都须要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名称是固定的而且放在每一个Android应用的根文件夹下.它定义了该应用对于Android系统来 ...

  9. MySQL和PostgreSQL 导入数据对照

    在虚拟机上測评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 由于是虚拟机上的測评,所以时间仅仅做參考,不要太较真, 看看就好了.MySQL 工具:    1. 自带 ...

  10. pomelo组件..

    1.pomelo会加载lib/components目录下的组件.并设置为属性..和存储在Pomelo.components中..注意这里其实存储的是对象的构造函数.. function load() ...