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 = ...
随机推荐
- 2016"百度之星" - 复赛(Astar Round3) 1003 拍照
拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...
- Android Activity 生命周期中onStart()和onResume()的区别
首先了解Activity的四种状态 Running状态:一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态.Paused状态:当Activity ...
- adb 启动失败的原因和修改adb端口号
在我们使用Android Studio的时候,有时候就会出现adb打开失败或者启动不了的情况. adb 启动失败的原因:有其他程序占用了adb默认启动的端口号(像我就遇到过,每次只要提前启动了酷狗音乐 ...
- Java实现在访问者模式中使用反射
集合类型在面向对象编程中很常用,这也带来一些代码相关的问题.比如,“怎么操作集合中不同类型的对象?” 一种做法就是遍历集合中的每个元素,然后根据它的类型而做具体的操作.这会很复杂,尤其当你不知道集合中 ...
- 【转】#include_next <filename.h>
转载自 http://bbs.csdn.net/topics/390381450 #include_next仅用于特殊的场合. 它被用于头文件中(#include既可用于头文件中, 又可用于.c文件中 ...
- Delphi给窗体镶边-为控件加边框,描边,改变边框颜色
PS:因为我现在用的电脑是WIN7 64位系统,所以没有实现功能,不知道XP是否可行. //1.定义方法 procedure WMNCPaint(var Msg : TWMNCPaint); mess ...
- SQL 正则表达式使模式匹配和数据提取变得更容易
SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...
- tomcat+JNDI+spring 的配置问题
在做spring有关的项目时,往往需要配置数据源,当然配置的方式有很多种,可以单独写在一个properties文件中,这样修改数据源配置的话比较容易,也比较简单,下面介绍另外一种数据源的配置 利用jn ...
- iOS_城市定位
技术点-利用CoreLoaction框架,实现城市定位功能. 原理: 利用苹果官方提供的CoreLocation框架实现城市定位的功能: 该框架主要包括两个比较有用的类:定位类CLLocationMa ...
- 【转】C++对象内存分配问题
原文:http://blog.csdn.net/c504665913/article/details/7797859 如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛.用C或 ...