javascript学习笔记(一)-廖雪峰教程

一. 基础

1.for in,for of和forEach

遍历的是对象的属性,由于数组也是对象,其内部的元素的索引就是其属性值,用该方式遍历数组就是获取了数组中的每一个元素的索引值(从0开始)。

而for of 则是直接遍历集合中的元素值本身。map、set和array都属于iterable类型的数据,都可以用for of来遍历:

var oMap = new Map([[‘anna‘,1],[‘mike‘,2],[‘betty‘,3]]);
for(var x of oMap){
    alert(x);  //输出每个键值对
}

此外,最好的方式是使用forEach,iterable类型的数据有内置的方法forEach,该方法接收一个参数,每遍历一个元素就调用该方法一次:

var a = [‘A‘, ‘B‘, ‘C‘];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    alert(element);
});

以该种方式遍历在map类型数据中,ele对应值,index对应键。

注意:forEach()方法是ES5.1标准引入的,你需要测试浏览器是否支持。

二. 函数

1.变量声明提升

注意提升的是声明,也就是说通过var 声明的变量在执行到声明语句之前使用了该变量是不会报错的,但是此时无法获取该变量的值,提升的时候并没有把赋值也提升了,该值为undefined,直到执行到该语句为这个变量赋值为止。

2.解决命名冲突的办法

将变量和函数都放到一个命名空间中,实际上就是定义了一个空对象,所有的变量和方法都作为该对象的属性和方法:

// 唯一的全局变量MYAPP:
var MYAPP = {};

// 其他变量:
MYAPP.name = ‘myapp‘;
MYAPP.version = 1.0;

// 其他函数:
MYAPP.foo = function () {
    return ‘foo‘;
};

3.ES6引入了let用来声明块级作用域内的变量,const来声明常量.

4.apply的用法

除了修改函数的作用域外(指定this值),还可以改变已有函数的行为,即为已经提供了的函数增加新的定义,例如统计调用了多少次parseInt:

var count = 0;
var oldParseInt = parseInt; // 保存原函数

window.parseInt = function () {
    count += 1;
    return oldParseInt.apply(null, arguments); // 调用原函数,null表示当做普通调用,不指定this值
};

// 测试:
parseInt(‘10‘);
parseInt(‘20‘);
parseInt(‘30‘);
count; // 3

5.Array.map(function(arg){})

对数组中每个元素调用function方法,将结果作为新的数组返回,不会改变原来的数组。参数构成和forEach方法类似。

6.闭包

一个函数中包含了闭包,每次调用外部函数,都会生成一个新的内部函数,也就是说闭包在外部函数调用时都是新生成的。

返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:

如下代码中,参数n绑定了每个i(思考活动对象中存储的内容包括了形参及其值,内部闭包会沿着作用域链找到外部立即执行的匿名函数活动对象中存储的变量值):

function count(){
    var f_arr=[];
    for(var i=1;i<=3;i++){
        var rs=(function(n){
            return function(){
                return n*n;
            }
        })(i);  //创建匿名函数并立即执行
        f_arr.push(rs);
    }
    return f_arr;
}

闭包可以延迟执行,或者提供了一个可以访问到函数私有变量的入口(闭包携带了状态)。

三. 标准对象

1.JSON

  • 把一个JavaScript对象转换成JSON对象:
JSON.stringify(JSobj,replacer,spliter)

replacer(key,value)可以是数组,数组中的元素是转换时要保留的JS对象的属性,也可以是一个函数,该函数对JS对象中的键值做了某些处理后返回,spliter是转换后的缩进等分割。例如:

function convert(key, value) {
    if (typeof value === ‘string‘) {
        return value.toUpperCase();
    }
    return value;
}

var xiaoJson=JSON.stringify(xiaoming, convert, ‘  ‘);

JSON对象反序列化为JS对象:

function addClassmate(key, value){
    if(key=="name"){
        return value+"同学";
    }
    return value;
}
var xiaoObj=JSON.parse(xiaoJson,addClassmate);

2.Date对象

data对象中月份是从0开始的,也就是0表示一月。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 09:42:35

javascript学习笔记(一)-廖雪峰教程的相关文章

学习笔记_廖雪峰&lt;Python 2.7 教程&gt;

进程和线程的基础知识 CPU执行代码是顺序执行, 单核CPU通过让任务交替执行, "模拟"除了多任务并发执行. 真正的多任务并发, 是在多核CPU上, 每个CPU负责执行一个任务. 但实际任务数量远多于CPU核心数量, 所以最终还是操作系统把多任务轮流调度到不同的核心上执行. 进程/线程和物理内存(寄存器)/CPU的关联: 函数调用, 会在栈中分配一块空间, 存放局部变量和参数, 调用结束, 栈空间被释放. 每个线程都有独立的栈, 寄存器. 同一进程里的所有线程共享文件, 代码和数据.

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

javascript学习笔记---ECMAScriptECMAScript 对象----修改对象

通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为. prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法. 创建新方法 通过已有的方法创建新方法Number.prototype.toHexString = function() { return this.toString(16); }; 在此环境中,关键字 this 指向 Number 的实例,因此可完全访问 Number 的所有方法.有了这段代码,可实现下面的操作: var iNu

javascript学习笔记——如何修改&lt;a href=&quot;#&quot;&gt;url name&lt;/a&gt;

0.前言 使用了一段时间javascript,再花了点时间学习了jquery,但是总是感觉自己很"迷糊",例如<a href="#">url name</a>中,如果修改href中的"#"应如何编写代码,如果修改url name应如何编写代码.再加上javascript和jquery操作方法略有不同,所以我就更"迷糊"了. [说明] 曾经使用关键词--"innerHTML和value区别&qu

javascript学习笔记---ECMAScript语法(辅助)

1.区分大小写. test与Test变量是两个不同的变量 2.变量是弱变量. 与C,java等等语言变量不是很一样. 如下java代码 ? 1 2 3 4 int i =0; //再次赋值 i = 10;//ok i = "hello";//wrong 类型不匹配 javascript ? 1 2 3 4 var i = 9; //再次赋值 i = 10;//ok i = "hello";//ok 但是不建议这么干,如此会给开发造成干扰,不明确变量的类型.(变量命名

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性