第二章 基础

通常认为在JavaScript中主要包括五种基本数据类型:
数字、字符串、布尔值、undefined、null。
任何不属于上述五种基本类型的值都被认为是一个对象。

null和undefined:通常认为null是它自有类型Null的唯一一个成员,undefined是预定义的全局变量(与null不同,它不是关键字),只读,它也是这个类型的唯一成员,如果试图访问某个不存在的或者未经赋值的变量时,就会得到一个undefined值。
有时候执行某种算术运算时,null和undefined的结果会截然不同。

另:typeof (null) 返回 object,被公认为是历史遗留错误。

关于NULL

以前只知道在C/C++中代表指针指向空的含义,发现在JS中居然是一种primitive type,有点吃惊,再一搜,发现在Java中也提到这是一种类型,只不过没有name,以前

没有注意到。

在C/C++中只是一个简单的宏定义,注意C++11倡导用 nullptr 代替NULL。

而在Java和JS中,我觉得还是直接看文档吧,把文档贴在这里(虽然文档的描述读起来很别扭):

其实 Java和 JS中的 null 本质上还是代表空指针而已,只不过在高级语言中封装一下,甚至把它单独作为一个类型列出来。

绝大部分值在转换为布尔类型时都为true,但以下6种falsy值除外:
"" null undefined 0 NaN false

一点联想:Java和C++中都有引用的概念,当然它们本质上都是指针,但是侧重点不太一样,C++中的是Type* const型的指针,侧重“引用即别名”,而 Java 中

侧重“对象的引用”(数组可看成一种特殊的对象),Java中的引用更类似于C++中的指针,尤其它们都与 new 连用。实际上,我好像记得轮子哥说过,引用其实就是

C++中的语法糖。

所以可以说Java中的指针(引用)只能指向对象,而不是像C++中可以指向primitive type,JS中自然也是如此。所以在上面的JS文档中:

The value null represents the intentional absence of any object value.

此外,像传值或者传引用这类老掉牙的问题我早就懂了,另:一切传引用本质上也是传值。

又一点联想:C++中的NULL和Java中的null有何区别?参考:Stackoverflow

Note:

(1)NaN == NaN false
(2)惰性求值:true || "some" true;
true && "some" "some";

typeof会返回一个代表数据类型的字符串,它的值包括:"number","string","boolean","undefined","object"和"function"。

第三章 函数

函数也是数据。

匿名函数,回调函数,自调函数,内部函数,返回函数的函数,能重写自己的函数。

 例子:
var a = function() {
function someSetup(){
var setup = 'done';
}
function actualwork(){
alert('Worky-worky');
}
someSetup();
return actualwork;
}();

闭包:

 function f(){
var b = "b";
return function(){
return b;
}
} var n = f(); n(); var n;
function f(){
var b = 'b';
n = function(){
return b;
}
} function f(arg){
var n = function(){
return arg;
}
arg++;
return n;
} var m = f(123);
m();

循环中的闭包:

 function f(){
var a = [];
for(var i = 0;i < 3;i++){
a[i] = function(){
return i;
}
}
return a;
} var m = f();
m[0]();
m[1]();
m[2](); function f(){
var a = [];
for (var i = 0; i < 3; i++) {
a[i] = (function(x){
return function(){
return x;
}
})(i);
}
return a;
} function f(){
var a = [];
for(var i = 0; i < 3; i++){
(function(arg){
a[i] = function(){
return arg;
}
})(i);
}
} fucntion f(){
function makeClosure(x){
return function(){
return x;
}
}
var a = [];
for(var i = 0; i < 3; i++){
a[i] = makeClosure(i);
}
return a;
}

Getter和Setter:

 var getValue, setValue;
(function(){
var serect = 0;
getValue = function(){
return serect;
};
setValue = function(v){
serect = v;
};
})()

迭代器:

 function setup(x){
var i = 0;
return function(){
return x[i++];
}
}
var next = setup(['a', 'b', 'c']);

第四章:对象

构造器函数

 function Hero(name){
this.name = name;
this.occupation = 'Ninja';
this.whoAreYou = function(){
return "I'm" + this.name + " and I'm a " + this.occupation;
}
}
var h1 = new Hero('lyrecxn');
h1.whoAreYou();

全局对象

构造器属性(constructor property)

instanceof操作符 测试一个对象是否由某个指定的构造器函数所创建的。

function C2(){this.a = 1; return {b : 2};}
var c2 = new C2();

内建对象:
数据封装类对象——包括Object、Array、Bollean、Number和String。这些对象代表着JavaScript不同的数据类型,并且都拥有各自不同的typeof返回值,以及undefined 和 null 状态。

工具类对象——包括Math、Date、RegExp等用于提供便利的对象。

错误类对象——包括一般性错误对象以及其他各种更特殊的错误类对象。

Object:
toString()方法、valueOf()方法、constructor属性

Array:
相当于属性名从 0 开始递增,并自动生成数值。
length属性
sort()方法、join()方法、slice()方法等

Function:
三种定义函数的方式,
属性:constructor、caller、prototype
方法:call()、apply()
重新认识arguments对象,function.argument

Boolean、Number、Math、Date:

String:
toUpperCase()与toLowerCase()、charAt、indexOf()。
slice()与substring()(对待负值的方式不同)
split()、concat()

RegExp:
属性:global,ignoreCase,multiline,lastIndex,source.前三个可以用regex修饰符来表示:gim。
方法:test(),exec().

以正则表达式为参数的字符串方法:match()、search()、replace()、split()

 例子:
var email = "stoyan@phpied.com";
var username = email.replace(/(.*)@.*/ , "$1");
>>>username;
"stoyan"

回调式替换:

 //回调式替换
var s = new String("HelloJavaScript")
function replaceCallback(match){
return "_" + match.toLowerCase();
}
s.replace(/[A-Z]/g, replaceCallback);

Error:

try catch throw finally

读《JavaScript面向对象编程指南》(一)的更多相关文章

  1. 读《Java并发编程的艺术》(一)

    离开博客园很久了,自从找到工作,到现在基本没有再写过博客了.在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜.所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督 ...

  2. 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结

    <Java并发编程实战>和<Java并发编程的艺术>           Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...

  3. 读《Java并发编程的艺术》学习笔记(一)

    接下来一个系列,是关于<Java并发编程的艺术>这本书的读书笔记以及相关知识点,主要是为了方便日后多次复习和防止忘记.废话不多说,直接步入主题: 第1章  并发编程的挑战 并发编程的目的是 ...

  4. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  5. Java并发编程的艺术(六)——线程间的通信

    多条线程之间有时需要数据交互,下面介绍五种线程间数据交互的方式,他们的使用场景各有不同. 1. volatile.synchronized关键字 PS:关于volatile的详细介绍请移步至:Java ...

  6. Java并发编程的艺术(三)——volatile

    1. 并发编程的两个关键问题 并发是让多个线程同时执行,若线程之间是独立的,那并发实现起来很简单,各自执行各自的就行:但往往多条线程之间需要共享数据,此时在并发编程过程中就不可避免要考虑两个问题:通信 ...

  7. 《Java并发编程的艺术》留给自己以后看的笔记

    <Java并发编程的艺术>这本书特别好,和<深入了解JAVA虚拟机>有一拼,建议做java的都看看,下面全部都是复制书中的部分内容,主要目的是做个笔记,方便以后遇到问题能找到. ...

  8. 读书笔记之《Java 并发编程的艺术》

    一.多线程语义 即使是单核处理器也支持多线程执行代码,CPU 通过给每个线程分配 CPU 时间片来执行任务,当前任务执行一个时间片后会切换到下一个任务,所以 CPU 通过不停的切换线程执行. 并发执行 ...

  9. 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理

    二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...

  10. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

随机推荐

  1. CnPack 开源软件项目

    Cnpack公共窗体库 ------------------------------ CnPack 2009-09-14 SVN 包,包括以下内容: 1. CnPack 组件包所有源代码.2. CnP ...

  2. JavaScript(3):JSON

    <!DOCTYPE html> <html> <body> <p>JSON</p> <script> // JSON 值可以是: ...

  3. CDH spark 命令行测试

    一. 参考 https://www.cnblogs.com/bovenson/p/5801536.html [root@node- test]# chown hdfs:hdfs /root/test/ ...

  4. SQL:SQL优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  5. collections(python常用内建模块)

    文章来源:https://www.liaoxuefeng.com/wiki/897692888725344/973805065315456 collections collections是Python ...

  6. U盘安装win7"安装程序无法创建新的系统分区" 怎么办

     装WIN7的朋友,不知遇到该类问题没有: 当我们通过PE进行WIN7 纯安装的时候(非ghost安装),系统提示”安装程序无法创建新的系统分区,也无法定位现有分区“,迫使我们操作终断,无法进行. 面 ...

  7. NoSQL--couchdb

    Couchdb CouchDB是Apache组织发布的一款开源的.面向文档类型的NoSQL数据库.由Erlang编写,使用json格式保存数据.CouchDB以RESTful的格式提供服务可以很方便的 ...

  8. Tomcat开机自启动,通过服务名重启

    1.将Tomcat注册为服务2.服务开机自启动3.修改Tomcat进程名(待补充)4.通过命令查看日志,不需要进入到日志目录(待补充)5.tomcat进程守护(待补充) 1. 安装tomcat, 此处 ...

  9. (5.4)mysql高可用系列——MySQL异步复制(实践)

    关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数 ...

  10. 自然语言处理工具pyhanlp分词与词性标注

    Pyhanlp分词与词性标注的相关内容记得此前是有分享过的.可能时间太久记不太清楚了.以下文章是分享自“baiziyu”所写(小部分内容有修改),供大家学习参考之用. 简介 pyhanlp是HanLP ...