《JavaScript启示录》摘抄
1、JavaScript预包装的9个原生的对象构造函数:
Number(),String(),Boolean(),Object(),Array(),Function(),Data(),RegExp(),Error()
2、以上对象返回的类型除了Function返回function外,其他的都返回object。
var myString=new String('foo');
console.log(typeof myString);
var myRegExp=new RegExp('\\bt[a-z]+\\b');
console.log(typeof myRegExp);
var myFunction=new Function("x","y","return x+y");
console.log(typeof myFunction);
var myNumber=new Number(23);
console.log(typeof myNumber);
var myObject=new Object();
console.log(typeof myObject);
var myArray=new Array('foo','bar');
console.log(typeof myArray);
var myData=new Date();
console.log(typeof myData);
var myError=new Error('Crap!');
console.log(typeof myError);
var myBoolean=new Boolean(false);
console.log(typeof myBoolean);

3、原生对象、自定义对象构造函数 代码对比
var Person=funtion(living,age,gender)
{
this.living=living;
this.age=age;
this.gender=gender;
this.getGender(){return this.gender;}
}
var codyA=new Person(true,33,'male');//自定义构造函数
var codyB=new Object;
codyB.living=true; //原生对象
4、复杂值:原生对象构造函数Object(),Array(),Function(),Data(),RegExp(),Error()是复杂类型,因为他们包含一个或多个原始值或复杂值。 P18
5、原始值(简单值)复制的时候复制的是值,复杂值复制的时候是复制的地址,即按照引用的方式复制。
6、使用new关键字创建String(),Number(),Boolean()值时,或者这些值在后台被转换成复杂对象时,即使原始值可以被看做是复杂值,他们也不具备通过引用进行复杂计算的特性。区别于第五点。 P20
7、复杂对象比较是按照地址比较的,即如果两个比较的对象指向同一地址,那么输出true,否则输出false,这与简单值的比较按照值比较不同。还需要注意的是,复杂对象的比较符号是===,注意是三个=。
8、delete是删除对象属性的唯一方法,因为将对象的属性设置为undefined或者null时只能改变属性的值,而不会将该属性从对象中删除。注意,delete不会删除原型链上找到的属性。
var foo={bar:'shabi'};
delete foo.bar;
console.log('bar' in foo);
结果会输出false,因为foo对象的bar属性已经被删除了。

9、hasOwnProperty函数可以检测一个属性是否来自原型链,当来自对象本身时,返回true,当来自原型链时返回false。
var myTest={foo:'value'};
console.log(myTest.hasOwnProperty('foo')); //返回true
console.log(myTest.hasOwnProperty('toString')); //返回false
10、区别于第9点,当我们使用 in 操作符查找某个属性的时候,他不光会查找自己本身的属性列表,还会通过原型链查找,而一旦找到了这个属性,都会返回true。 P37
var myTest={foo:'value'};
console.log(myTest.hasOwnProperty('foo')); //返回true
console.log(myTest.hasOwnProperty('toString')); //返回false
console.log('toString' in myTest); //返回true
11、for in循环不仅会遍历特定对象的本地属性,还会遍历所继承(通过原型链)的对象上的属性,因此,我们需要在循环内加入hasOwnProperty()函数过滤掉哪些通过原型链查找到的属性。
var cody={age:23,gender:'male'};
for(var key in cody)
{
if(cody.hasOwnProperty(key))
{console.log(key);} //输出age和gender
}
12、JavaScript和c++的变量都是以字母、下划线开头的,以字母、数字、下划线组成的字符串来命名变量。
13、函数都会返回值,当我们没有显式设置返回值的时候,函数会返回undefined。 P52
14、自调用函数:在定义函数表达式后立即调用该函数表达式。 P59
var sayWord=function(){console.log('大帅B')}();
15、在JavaScript中,只有全局作用域、局部作用域(函数作用域)、evel作用域。它不同于c++,它不存在块作用域,即在if、for语句块内无法创建作用域,变量可以相互覆盖。 P78
var temp=10; //temp在任何地方都有效 包括test函数和eval语句
var test=function()
{ console.log(temp);
var temp1=100; //temp1只在test函数作用域内有效
}();
eval('var temp2=1000;console.log(temp);'); //temp2只在eval语句中有效
console.log(temp);
console.log(temp1); //输出undefined
console.log(temp2); //输出undefined
16、JavaScript会将缺少var的变量声明为全局变量,即便这个变量在函数体中。 P78
var temp=10; //temp在任何地方都有效 包括test函数和eval语句
var test=function()
{ console.log(temp);
temp1=100; //temp1前面没有var 此时他是全局作用域的
}();
eval('temp2=1000;console.log(temp);'); //temp2前面没有var 此时他是全局作用域的
console.log(temp);
console.log(temp1); //输出100
console.log(temp2); //输出1000
17、闭包:
var count=function()
{
var i=0;
return function()
{
return i++;
}
}() //这里的()不要忘记 起到count函数立即调用自己的作用
console.log(count()); //输出0
console.log(count()); //输出1
console.log(count()); //输出2
18、有没有new关键字很重要:
var myBoolean=Boolean(0); //这里没有使用new关键字 当做原始值处理
if(myBoolean)
console.log('myBoolean is true');
else
console.log('myBoolean is false'); var myBoolean1=new Boolean(0); //使用new关键字 false布尔对象 实际上是true对象
if(myBoolean1)
console.log('myBoolean1 is true');
else
console.log('myBoolean1 is false');
输出结果:
可以看到没有使用new关键字时,输出false;
使用了new关键字时,输出true。(非原始false布尔对象转换为true) P111
19、对于拥有null值的变量,typeof操作符会返回object。 P117
var myObject=null;
console.log(typeof myObject);
console.log(myObject===null);
输出为:

《JavaScript启示录》摘抄的更多相关文章
- <Wonder Woman> 摘抄
<Wonder Woman> My father told me once, he said,“ If you see something wrong happening in the w ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- iOS——Core Animation 知识摘抄(一)
本文是对http://www.cocoachina.com/ios/20150104/10814.html文章的关键段落的摘抄,有需要的看原文 CALayer和UIView的关系: CALayer类在 ...
- VGA信号一些分辨率的参数(摘抄)
摘抄自:http://group.chinaaet.com/273/4100029440 VGA的接口时序如图所示,场同步信号VSYNC在每帧(即送一次全屏的图像)开始的时候产生一个固定宽度的高脉冲, ...
- BeanShell用法汇总(部分摘抄至网络)【转】
说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...
- linux学习之——学习路线(摘抄)
摘抄某笔者的Linux练习的道路图(rolistingmap): 对比一下为什么要学习linux 了解Linux的基础常识,这些包括了用户管理.群组的概念.权限的观念等 掌握至多50个以上的常用命令 ...
- spring事务管理-摘抄
原著网址 http://gcq04552015.iteye.com/blog/1666570 Spring是以代理的方式实现对事务的管理.我们在Action中所使用的Service对象,其实是代理对象 ...
- 摘抄--使用cos实现多个文件上传详解
在开发中常常需要上传文件,上传文件的方式有很多种,这里有一个cos实现的例子. 首先是要拷贝cos.jar包拷贝到WEB-INF/lib目录下,然后才进行编码. 创建一个可以进行自动重命名的Java文 ...
- vi编辑器简单应用(摘抄)
摘抄于 vi编辑器的使用 (2) (3) 1 vi编辑器的基本使用 1.1 vi的启动 打开: $ vi example.c 只读打开 $ vi –R example.c 1.2 vi的工作模式 1. ...
- (摘抄)HTTP 协议详解
这个是从网上摘抄下来的,原文链接在最底下,原文写的比较详细,我这里只取了一部分自己想要的 什么是HTTP协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超 ...
随机推荐
- url解析
window.onload=function(){ var url="http://www.qq.com/index.html?key1=1&key2=2&key3=3&qu ...
- Divide and conquer method
分治法是最广泛使用的算法设计方法之一,其基本思想:把大问题分解成一些较小的问题,然后由小问题的解方便地构造出大问题的解. 分治法说穿了就是把问题放小,如果被分的问题还是比较大,那么久继续分下去.为了能 ...
- SSM成功了
- ASP大数据量使用GetRows()提升速度
抽取10万条数据,Access数据库,GetRows() 现有10W条数据,Access数据库保存 通过正常提取: <% Set conn= Server.CreateObject(" ...
- 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确
一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确 最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...
- 解决64位win7系统IIS7[ODBC 驱动程序管理器]未发现数据源名称并且未指定默认驱动程序
从网上下载了一个asp系统,数据库是Access类型的,运行环境为 64位Windows 7系统,IIS7,运行系统后,报如下错误: Microsoft OLE DB Provider for ODB ...
- 在linux环境下配置node:node + npm + forever
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3574582.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Headfirst设计模式的C++实现——状态模式(State)
state.h #ifndef _STATE_H_ #define _STATE_H_ class GumballMachine; class State { public: ; ; ; ; Stat ...
- Head First 设计模式系列之一----模板模式(java版)
开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年 ...
- 让hyper-v调整console的大小
在hyper-v中centos的console一直都是1024x768的分辨率,后来找到一种修改分辨率的解决方法 grubby --update-kernel=ALL --args="vid ...