《JavaScript面向对象编程指南(第2版)》读书笔记(一)
- 《JavaScript面向对象编程指南(第2版)》读书笔记(一)
- 《JavaScript面向对象编程指南(第2版)》读书笔记(二)
目录
一、对象
1.1 获取属性值的方式
1.2 获取动态生成的属性的值
二、数组
2.1 检测是否为数组
2.2 增加数组长度导致未赋值的位置为undefined
2.3 用闭包实现简易迭代器
三、作用域
3.1 函数作用域(局部变量)
3.2 不存在块级作用域
3.3 变量泄露
3.4 变量提升
3.5 临时作用域
四、闭包
4.1 操作闭包中的值
五、事件监听
六、类型检测
七、类型转换
八、URL编码
8.1 编码
8.2 解码
九、JSON格式
9.1 转为JSON格式
9.2 转为对象
十、兼容性问题
一、对象
1.1 获取属性值的方式
water = {
down: false
}
console.log(water.down) // false
console.log(water['down']) // false
1.2 获取动态生成的属性的值
var type = 'down'
console.log(water[type]) // false
二、数组
2.1 检测是否为数组
typeof([1,2]) // object
Array.isArray([1,2]) // true
Object.prototype.toString.call([1,2]) // [object Array]
Array.isArray(Array.prototype) // true
Object.prototype.toString.call(Array.prototype) // [object Array]
2.2 增加数组长度导致未赋值的位置为undefined
减少数组长度则会裁去多余的值。
var x = [1,2];
x.length = 7;
console.log(x); // [1, 2, undefined × 5]
x.length = 1;
console.log(x); // [1]
2.3 用闭包实现简易迭代器
var next = setup([3,3,9]);
function setup(x){
var i = 0;
return function(){
console.log(x[i++]);
}
}
next(); // 3
next(); // 3
next(); // 9
next(); // undefined
三、作用域
3.1 函数作用域(局部变量)
不能在函数体外直接访问函数内变量。
function water() {
var direction = 'down'
}
console.log(direction) // Uncaught ReferenceError: direction is not defined
3.2 不存在块级作用域
for、if等代码块中的变量不是局部变量。
if(water){
var down = true
}
console.log(down) // true
3.3 变量泄露
函数体内的变量未声明,会在函数第一次执行的时候泄露成全局变量。
function water() {
direction = 'down'
}
water() // 执行函数
console.log(direction) // down
3.4 变量提升
已声明的变量名会提升至顶部,值不会提升。
var down = true
function water() {
// 变量提升覆盖了外部down,由于值没有提升,所以为undefined
console.log(down) // undefined
var down = false // false
console.log(down)
}
water()
3.5 临时作用域
call和apply借用另一个对象的方法,提高代码复用
第一个参数为this的指向,第二个参数为传入的参数,apply传入数组
构造函数不使用new this的值会指向window
四、闭包
4.1 操作闭包中的值
var nature = (function() {
var water = {}
water.down = false
water.get = function(type) {
return water[type]
}
water.set = function(type,val) {
water[type] = val
return typeof(val) === 'boolean' ? true : false
}
return {
getWater: water.get,
setWater: water.set
}
})()
console.log(nature.getWater('down')) // false
console.log(nature.setWater('down',true)) // true
五、事件监听
var event = {
add: function ( dom,type,func ) {
if(window.addEventListener){
dom.addEventListener( type,func,false )
}
// 兼容IE9以下
else if(document.attachEvent) {
dom.attachEvent('on' + type,func)
}
else {
dom['on' + type] = func
}
},
del: function ( dom,type,func ) {
if(window.addEventListener){
dom.removeEventListener( type,func,false )
}
else if(document.attachEvent) {
dom.detachEvent('on' + type,func)
}
else {
dom['on' + type] = null
}
}
}
var f = function(){
console.log('event received')
}
event.add(document.body,'click',f)
event.del(document.body,'click',f)
六、类型检测
6.1 常用类型
typeof(1) // "number"
number/boolean/string/undefined/object/function
6.2 继承检测
function Water (name,status) {
this.name = name
this.status = status
}
var seaWater = new Water('sea','warm')
seaWater instanceof Water // true
6.3 NaN和isFinite检测
NaN不等于NaN,检测需要使用isNaN函数。
NaN === NaN // false
isNaN(NaN) // true
七、类型转换
7.1 转为整形
parseInt和parseFloat碰到第一个异常字符就会终止。
console.log(parseInt(66.5t)) // 66.5
console.log(parseInt(t66.5t)) // NaN
7.2 null和undefined
数值超出范围则显示Infinity。
console.log(1*undefined) // NaN
console.log(1*null) // 0
八、URL编码
8.1 编码
var src = "http://www.cnblogs.com/bergwhite/p/6657943.html"
var srcURI = encodeURI(src) // "http://www.cnblogs.com/bergwhite/p/6657943.html"
var srcURICom = encodeURIComponent(src) // "http%3A%2F%2Fwww.cnblogs.com%2Fbergwhite%2Fp%2F6657943.html"
8.2 解码
decodeURI(srcURI) // "http://www.cnblogs.com/bergwhite/p/6657943.html"
decodeURIComponent(srcURI) // "http://www.cnblogs.com/bergwhite/p/6657943.html"
九、JSON格式
9.1 转为JSON格式
var water = {
down: false
}
var waterJSON = JSON.stringify(water) // "{"down":false}"
9.2 转为对象
JSON.parse(waterJSON) // Object {down: false}
十、兼容性问题
parseInt(09) // ES5中默认不转换八进制,ES3会默认作为八进制
parseInt(09,10) // 当值为日期的时候,作为十进制处理
感谢大家的阅读。
《JavaScript面向对象编程指南(第2版)》读书笔记(一)的更多相关文章
- 《html5 从入门到精通》读书笔记(一)
今天看了<html5 从入门到精通>这本书,感觉阅读下来很舒心,不像阅读其他书籍很揪心.html增加的知识点,我觉得非常有价值,看完几章记录了一些内容,不但能巩固,也为下次遗忘知识点做好准 ...
- HTML5从入门到精通(明日科技) 中文pdf扫描版
HTML5从入门到精通(明日科技) 中文pdf扫描版
- HTML5从入门到精通(千锋教育)免费电子版+PDF下载
本书是HTML5初学者极好的入门教材之一,内容通俗易懂.由浅入深.循序渐进.本书内容覆盖全面.讲解详细,其中包括标签语义化.标签使用规范.选择器类型.盒模型.标签分类.样式重置.CSS优化.Photo ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- Oracle从入门到精通----学习笔记
书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...
- MySQL数据库应用 从入门到精通 学习笔记
以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库查看所有数据库: SHOW DATABASES创建数据库: CREATE DA ...
- Unity Shader入门精要读书笔记(二)UnityShader概述
第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...
- 《html5 从入门到精通》读书笔记(二)
接着上面继续记录笔记,这次要记的知识点比较多...记录下我认为比较重要的东西. 一.表单属性 1.autocomplete属性 该属性规定form或input域应该拥有自动完成功能. <form ...
- 《html5 从入门到精通》读书笔记(三)
二.标签详解 标签 描述 4 5 <form> 定义表单. 4 5 <h1> to <h6> 定义标题1到标题6. 4 5 <head> 定义关于文档的 ...
- 《HTML5 CANVAS基础教程》读书笔记
一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...
随机推荐
- Select的逻辑处理顺序(Transact-SQL)
1. Select 语句基本写法 2. Select的逻辑处理顺序 SQL与其他编程语言不同的明显特征就是代码的处理顺序.在其他编程语言中,常见是按编写代码的先后顺序(从上之下)来处理.但在SQL中, ...
- 69个微信小程序常见问题
本文转自 遇到小程序方面的问题,该去哪里提问呢? 若是能得到微信官方的解答,想必是最叫人安心的.而微信也确实提供了这么一个地方. 在微信公众平台的开发者社区,就置顶了一个「小程序常见问题 FAQ」帖. ...
- Linux命令语句秘籍
系统管理命令 stat 显示指定文件的详细信息,比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 host ...
- 关于html中利用jQuery选择子节点方法总结——待续
好几次碰到类似的要求,每次用的都不一样,在之前的面试的时候就被问到,突然觉得虽然自己做过但是说不出头绪,只能回答什么parent(),next()等等.所以想整理一下. 1.需求一:同页面有两个表格, ...
- Python(五)编程小实例
Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...
- CSS中清除浮动的方法
CSS浮动,最早是为了达到文字环绕的效果提出的,也可以用来做布局,但是布局会产生很多问题(高度塌陷,漂浮在普通流上),会使当前标签产生上浮的效果,会影响前后标签,同样的代码在不同的浏览器的兼容性也不一 ...
- 通过 dhcp-agent 访问 Metadata - 每天5分钟玩转 OpenStack(168)
OpenStack 默认通过 l3-agent 创建和管理 neutron-ns-metadata-proxy,进而与 nova-metadata-api 通信.但不是所有环境都有 l3-agent, ...
- Intellij IDEA中文乱码解决
界面乱码 原因:IDEA默认设置界面的字体不支持中文 解决:修改为支持中文的字体,建议字体Microsoft Yahei UI.大小11,具体操作File -> Setting -> Ap ...
- 记录一次坑爹的VM连接主机的路程
因为之前电脑配置过虚拟机连接主机的过程,所以没有太在意,换电脑了之后配了两天结果没有配置成功; 首先配置静态ip: 1,编辑第一个文件/etc/sysconfig/network-scripts/if ...
- 使用assets目录来实现插件机制
/** * 管理接口. * @author jevan * @version 1.0 at 2013-12-6 * */ public interface IManage { /** * 注册平台接口 ...