第二章 基础

通常认为在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

最新文章

  1. Hibernate4 获取SessionFactory
  2. UIWebView和Js交互
  3. oracle中的cluster表
  4. Oracle数据库和MySQL数据库的不同之处
  5. 在code.org上自己写一个flappy bird游戏
  6. poj 1847 Tram【spfa最短路】
  7. javascript DOM艺术
  8. java集合类深入分析之Queue篇(Q,DQ)
  9. UVA 11054 Wine trading in Gergovia 葡萄酒交易 贪心+模拟
  10. OJ题目JAVA与C运行效率对比
  11. perl的列表(List)和数组(Array)
  12. PAT1005
  13. 小谈JavaScript中this的用法
  14. Eureka源码探索(一)-客户端服务端的启动和负载均衡
  15. 如何探测网络设备ACL规则
  16. About me &amp; 留言板
  17. Python 多线程和线程池
  18. c#的一些快捷键
  19. SQL2008R2的 遍历所有表更新统计信息 和 索引重建
  20. 搭建自己的Docker registry(五)

热门文章

  1. 重启 hdfs and yarn datanode
  2. EncryptHelper加密对象-工具类
  3. 开发单体web shop] 6. 商品分类和轮播广告展示
  4. Beego框架的一条神秘日志引发的思考
  5. WDM-波分复用
  6. 【神经网络与深度学习】Caffe Model Zoo许多训练好的caffemodel
  7. 统计学习方法 | 第1章 统计学习方法概论 | np.random.rand()函数
  8. javase-整数变量的交换
  9. java crc32
  10. 尝试自己搭一个简单的typescript运行环境