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
基本语法 - 对象
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。因此,遍历内部元素的时候,会得到不同的结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)