Javascript标准参考教程学习记录
2015-04-21 11:58
253 查看
教程:http://javascript.ruanyifeng.com/
基本语法 - 函数
1、函数名的提升
JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部。下面的代码不会报错。
但是,采用赋值语句定义函数,JavaScript就会报错。
如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。
2、参数传递方式
JavaScript的函数参数传递方式是传值传递(passes by value),但是对于复合类型的变量来说,属性值是按址传递(pass by reference),也就是说,属性值是通过地址读取的。所以在函数体内修改复合类型变量的属性值,会影响到函数外部。
简单地理解,函数体内整体修改传递进来的复合类型变量,如数组、对象,是不会影响到函数外部,但修改属性值就会到函数外部。
3、eval命令
eval没有自己的作用域,都在当前作用域内执行。
ECMAScript 5将eval的使用分成两种情况,像上面这样的调用,就叫做“直接使用”。另一种情况是,eval不是直接调用,而是“间接调用”,此时eval的作用域总是全局作用域。
[b]基本语法 - 对象[/b]
1、检查变量是否声明
这二种写法有漏洞,如果a属性是一个空字符串(或其他对应的布尔值为false的情况),则无法起到检查变量是否声明的作用。正确的写法是使用in运算符。
2、查看所有属性
查看一个对象本身的所有属性,可以使用Object.keys方法。
3、with语句
with语句少数有用场合之一,就是替换模板变量。
上面代码是一个模板字符串,为了替换其中的变量name,可以先将其分解成三部分'Hello ', name, '!',然后进行模板变量替换。
上面代码中,with区块内部,模板变量name可以被对象o的属性替换,而p依然是全局变量。事实上,这就是很多模板引擎的实现原理。
标准库 - Date对象
1、Date.now()
now方法返回当前距离1970年1月1日 00:00:00 UTC的毫秒数(Unix时间戳乘以1000)。
如果需要更精确的时间,可以使用window.performance.now()。它提供页面加载到命令运行时的已经过去的时间,单位是浮点数形式的毫秒。
面向对象编程 - 概述
1、apply方法
将数组的空元素变为undefined
空元素与undefined的差别在于,数组的foreach方法会跳过空元素,但是不会跳过undefined。因此,遍历内部元素的时候,会得到不同的结果。
基本语法 - 函数
1、函数名的提升
JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部。下面的代码不会报错。
f(); function f(){}
但是,采用赋值语句定义函数,JavaScript就会报错。
f(); var f = function (){}; // TypeError: undefined is not a function
如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。
2、参数传递方式
JavaScript的函数参数传递方式是传值传递(passes by value),但是对于复合类型的变量来说,属性值是按址传递(pass by reference),也就是说,属性值是通过地址读取的。所以在函数体内修改复合类型变量的属性值,会影响到函数外部。
简单地理解,函数体内整体修改传递进来的复合类型变量,如数组、对象,是不会影响到函数外部,但修改属性值就会到函数外部。
var o = [1,2,3]; function f1(o){ o = [2,3,4]; } f1(o); console.log(o); // [1,2,3] function f2(o){ o[2] = 4; } f2(o); console.log(o); // [1,2,4]
3、eval命令
eval没有自己的作用域,都在当前作用域内执行。
var a = 1; eval('a = 2');
ECMAScript 5将eval的使用分成两种情况,像上面这样的调用,就叫做“直接使用”。另一种情况是,eval不是直接调用,而是“间接调用”,此时eval的作用域总是全局作用域。
var a = 1; function f(){ var a = 2; var e = eval; e('console.log(a)'); } f(); // 1
[b]基本语法 - 对象[/b]
1、检查变量是否声明
if(window.a) {...} // 不报错 if(window['a']) {...} // 不报错
这二种写法有漏洞,如果a属性是一个空字符串(或其他对应的布尔值为false的情况),则无法起到检查变量是否声明的作用。正确的写法是使用in运算符。
if('a' in window) {...}
2、查看所有属性
查看一个对象本身的所有属性,可以使用Object.keys方法。
var o = { key1: 1, key2: 2 }; Object.keys(o); // ["key1", "key2"]
3、with语句
with语句少数有用场合之一,就是替换模板变量。
var str = 'Hello <%= name %>!';
上面代码是一个模板字符串,为了替换其中的变量name,可以先将其分解成三部分'Hello ', name, '!',然后进行模板变量替换。
var o = { name: 'Alice' }; var p = []; var tmpl = ''; with(o){ p.push('Hello ', name, '!'); }; p.join('') // "Hello Alice!"
上面代码中,with区块内部,模板变量name可以被对象o的属性替换,而p依然是全局变量。事实上,这就是很多模板引擎的实现原理。
标准库 - Date对象
1、Date.now()
now方法返回当前距离1970年1月1日 00:00:00 UTC的毫秒数(Unix时间戳乘以1000)。
如果需要更精确的时间,可以使用window.performance.now()。它提供页面加载到命令运行时的已经过去的时间,单位是浮点数形式的毫秒。
面向对象编程 - 概述
1、apply方法
将数组的空元素变为undefined
Array.apply(null, ["a",,"b"]) // [ 'a', undefined, 'b' ]
空元素与undefined的差别在于,数组的foreach方法会跳过空元素,但是不会跳过undefined。因此,遍历内部元素的时候,会得到不同的结果。
相关文章推荐
- Python个 flask 教程地址 做个记录方便以后学习用
- 简明python教程学习笔记之九-对象参考
- CCF计算机软件能力认证模拟试题-ISBN号码(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-数位之和(Java参考答案学习记录)
- 进程间通信 华清远见-《嵌入式 Linux 应用程序开发标准教程》学习记录
- 记录分享一个IT学习分享教程网站
- CCF计算机软件能力认证试题练习-门禁系统(Java参考答案学习记录)
- 学习ROS wiki 上rqt教程随手记录(一)
- 我的python学习记录_Python基础教程
- Unity 3D 官方教程—— 2D Physics系列 学习记录
- php系列教程学习参考网站列表(0)
- Unity 3D官方教程——2D Roguelike学习记录
- 【JavaScript 学习】没啥参考价值,纯记录,来自w3school
- 【python学习记录】-3-Python图像处理库:Pillow 初级教程
- 开始学习Matlab,一点一滴记录自己的所学 仅供个人参考Matlab(1)
- [推 荐] 天罗地网:精品Linux学习资料大收集(电子书+视频教程) Linux初学及参考资源大系
- 【转大家网】天罗地网:精品Linux学习资料大收集(电子书+视频教程) Linux初学及参考资源大系
- 我的参考文章&学习记录
- CCF计算机软件能力认证试题练习-数列分段(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-相邻数对(Java参考答案学习记录)