Javascript标准参考教程学习记录
教程:http://javascript.ruanyifeng.com/
基本语法 - 函数
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、检查变量是否声明
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。因此,遍历内部元素的时候,会得到不同的结果。
Javascript标准参考教程学习记录的更多相关文章
- Canvas API -- JavaScript 标准参考教程(alpha)
Canvas API -- JavaScript 标准参考教程(alpha) Canvas API
- JavaScript 标准参考教程(alpha) 阮一峰
JavaScript 标准参考教程(alpha)http://javascript.ruanyifeng.com/#introduction
- 记阮一峰---JavaScript 标准参考教程之标准库-Object对象
在看到阮大神的-标准库-Object对象时 有个 类型判断类型 方法可能以后会用到.特此记录一下 4.3:toString()的应用:判断数据类型 Object.prototype.toString方 ...
- Javascript 标准参考教程
http://javascript.ruanyifeng.com/grammar/array.html
- *JavaScript标准参考教程 - 阮一峰
参考 页向对象编程的模式(继承&模块化)
- JavaScript 核心参考教程 内置对象
这个标准基于 JavaScript (Netscape) 和 JScript (Microsoft).Netscape (Navigator 2.0) 的 Brendan Eich 发明了这门语言,从 ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
随机推荐
- 《操作系统真象还原》MBR
以下是读本书第三章的收获. 如何知道一个源程序的各符号(指令和变量)地址?简单来说,地址就是该符号偏移文件开头的距离,符号的地址是按顺序编排的,所以两个相邻的符号,其地址也是相邻的.对于指令来说,指令 ...
- HW - VCN 介绍
VCN 是个管理摄像机的平台 用来增删改查摄像机,获取摄像机视频流,获取录像 vcn会基于我们的接口做一次开发,作为相机的统一管理入口,获取相机的信息
- 题解 AT4556 【12/22】
题目传送门. ___________ 主要思路 我们可以使用\(C++\)语言中的\(string\)字符串来解. 先定义一个字符串\(s\),并输入\(s\). string s; cin>& ...
- Linux C语言 文件操作
打开函数 fopen 的原型如下. FILE * fopen(char *filename, char *mode); 返回值:打开成功,返回该文件对应的 FILE 类型的指针:打开失败,返回 NUL ...
- 2020牛客寒假算法基础集训营6 E.立方数(唯一分解定理 素数筛)
https://ac.nowcoder.com/acm/contest/3007/E 放下题解 #include<bits/stdc++.h> using namespace std; t ...
- reids中删除某个前缀的所有key
需求:reids中删除某个前缀的所有key 说明:代码中的0:2标识从key前缀中截取前2个字符,这里示例的时候比如“b_”前缀,使用时候根据实际情况截取对应的长度进行判断即可. 生成测试数据 #!/ ...
- Unable to open debugger port (127.0.0.1:13249): java.net.BindException "Address already in use: JVM_Bind"
这个问题比较简单一点,Tomcat的端口被占用了,我使用的是IDEA里的一个热部署插件JReble,更新了IDEA之后就发现端口被占用了,可能我电脑没有重启过吧, 一直被占用着,所以解决方法就是更换一 ...
- Codeforce 474A - Keyboard
Our good friend Mole is trying to code a big message. He is typing on an unusual keyboard with chara ...
- a标签绑定事件
<a href="javascript:void(0);" onclick="js_method()"></a> 这种方法是很多网站最常 ...
- Cannot read property 'resolve' of undefined
可能是node下载的有问题 推荐官网:https://nodejs.org/zh-cn/