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表示一月。
javascript学习笔记(一)-廖雪峰教程的更多相关文章
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- JavaScript:学习笔记(5)——箭头函数=>以及实践
JavaScript:学习笔记(5)——箭头函数=>以及实践 ES6标准新增了一种新的函数:Arrow Function(箭头函数).本文参考的链接如下: MDN箭头函数:https://dev ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- Java程序猿JavaScript学习笔记(14——扩大jQuery UI)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
随机推荐
- [Apple开发者帐户帮助]二、管理你的团队(7)管理服务器帐户
如果在配置机器人以在多个设备上运行应用程序时向团队添加服务器,允许Xcode Server为您管理签名,或者配置机器人以创建iOS App文件,则服务器可以访问您的资产并显示在您的开发人员帐户 您可以 ...
- Java多线程技术-Volatile关键字解析
分析volatile关键字可以从这三个方面分析,什么是程序的原子性,什么是程序的可见性,什么是程序的有序性 什么是程序的原子性 以下语句那些是原子操作? public class ThreadCoun ...
- java反射机制学习小结
之前一直对java的反射机制理解得很模糊,今天因为学习spring,所以花了些时间总算把它理顺了,记录一下 另外,推荐读读这篇文章,写的挺好的http://blog.csdn.net/woshixuy ...
- Ubuntu1804安装Postgresql【转】
转载自:https://huur.cn/course/yw/1591.html 关系数据库管理系统是许多网站和应用程序的关键组成部分.它们提供了一种结构化的方式来存储,组织和访问信息. Postgre ...
- SDOI 2018 round2游记
Day 0 早上起来从北京到济南 住宿环境不错 不过比赛环境怎么这么low啊 而且我在最偏僻的考场中最偏僻的角落里 身边居然是个妹子?! Day1 7:40到的考试地点 发现诸位大佬已经打完板子了or ...
- 后端springmvc,前端html5的FormData实现文件断点上传
前言 最近项目中有使用到文件断点上传,得空便总结总结,顺便记录一下,毕竟“好记性不如烂笔头”. 后端代码: package com.test.controller; import java.io.Bu ...
- 努比亚 N2(Nubia NX575J) 解锁BootLoader 并进入临时recovery ROOT
工具下载链接:https://pan.baidu.com/s/1jJoK2Yq 备用下载链接:https://pan.baidu.com/s/1snjwLdz 密码:71rg 本篇教程教你如何傻瓜式解 ...
- href标签中target的几个属性值
没有指定<a>的target属性值时,默认是"_blank,可以参考以下代码的设置来控制<a href="#" target="_blank& ...
- oracle-3种工具使用
1:原命令行,dos 2:sqlplus,图形界面 3:isqlplus,网页版的.(假如自己机器无法安装oracle,可通过别人ip地址去使用oracle,http://ip:5560/isqlpl ...
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...