一. 基础

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表示一月。

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

  1. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  2. JavaScript:学习笔记(5)——箭头函数=>以及实践

    JavaScript:学习笔记(5)——箭头函数=>以及实践 ES6标准新增了一种新的函数:Arrow Function(箭头函数).本文参考的链接如下: MDN箭头函数:https://dev ...

  3. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  4. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  6. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  8. Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  9. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  10. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

随机推荐

  1. A Reusable Aspect for Memory Profiling

    例子: malPro.acc文件: #include <stdlib.h> size_t totalMemoryAllocated; int totalAllocationFuncCall ...

  2. (Go)08.time示例

    package main import ( "fmt" "time" ) func test() { ) } func main() { now := time ...

  3. PCB 全景图技术实现

    为了对3D模型理解更透,这里采用threejs(WebGL第三方库)实现,刚开始学习入门,为了能看明白基本上每行代码都注释. 如果仅仅是为了实现全景图,可以用photo-sphere-viewer.j ...

  4. Python 35 线程(2)线程特性、守护线程、线程互斥锁

    一:线程特性介绍 from threading import Thread import time n=100 def task(): global n n=0 if __name__ == '__m ...

  5. vue 中数据没有同步渲染的解决方法

    今天在做一个页面,遇到一个数据渲染不同步的问题,如下: 代码如下:原理:点击时,对应的banklist 的选项选项变为 true 选中状态 html: <div class="PayO ...

  6. JQuery 兼容所有浏览器的复制到剪切板功能

    灵机一动想的点子,应该不难理解 <textarea onmousedown='selectAll(this);'>11111</textarea> function selec ...

  7. Unity引擎GUI之Button

    UGUI Button,可以说是真正的使用最广泛.功能最全面.几乎涵盖任何模块无所不用无所不能的组件,掌握了它的灵巧使用,你就几乎掌握了大半个UGUI! 一.Button组件: Interactabl ...

  8. python爬虫:爬取百度云盘资料,保存下载地址、链接标题、链接详情

    在网上看到的教程,但是我嫌弃那个教程写的乱(虽然最后显示我也没高明多少,哈哈),就随手写了一个 主要是嫌弃盘搜那些恶心的广告,这样直接下载下来,眼睛清爽多了. 用pyinstall 打包成EXE文件, ...

  9. session 存入redis 或 memcache 的方法

      Session简介 session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们 ...

  10. RecyclerView 悬浮/粘性头部效果3种方式

    但是以上两种方式onDrawOver()方法实现逻辑对初次查看该段代码要花时间理解.下面代码逻辑(原理一样,同样参考大神代码)相对清晰,易理解 public class StickyDecoratio ...