本文参考资料:《JavaScript权威指南》

第六章:对象

6.1 创建对象

var book={
"main title":"javaScript", //属性名字有空格,必须用字符串表示
'sub-title':"Definitive Guidee", //属性名字连字符,必须用字符串表示
"for":"all audiences", //“for”是保留字,必须用字符串表示
author:{
firstname:"Tom",
surname:" Fla"
}
};

6.2 属性的查询和设置

通过点(.)或者方括号([])运算符来获取属性的值。

点(.):右侧必须是一个以属性名称命名的简单标示符。

方括号([]):方括号内必须是一个计算结果为字符串的表达式,这个字符串就是属性的名字。

6.2.3 属性访问错误

//获取更简练的常用方法,获取subtilte的length属性或undefined
var len=book && book.subtitle && book.subtitle.length;

6.8 对象的三个属性

原型(prototype)、类(class)和可扩展性(extensibleattribute)

6.8.1 原型属性

检测一个对象是否是另一个对象的原型(或处于原型链中),请使用isPrototypeOf()方法。

var p={x:1};                                 //定义一个原型对象
var o=Object.create(p); //使用这个原型创建一个对象
p.isPrototypeOf(o) //=>true : o继承自p
Object.prototype.isPrototypeOf(o) //=>p继承自Object.prototype

6.9 序列化对象

对象序列化(serializeation)是指将对象的状态转化为字符串,也可将字符串还原为对象。

JSON.stringify():序列化

JSON.parse():h还原JavaScript对象

o={x:1,y:{z:[false,null,""]}};  //定义一个测试对象
s=JSON.stringify(o); //s是‘{“x”:1,"y";{"z":[false,null,""]}}’
p=JSON.parse(s); //p是o的沈拷贝

第七章 数组

javaScript数组是动态的:根据徐璈它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或则在数组大小变化时无需重新分配空间。

javaScript数组可能是疏密的:数组元素的索引不一定要连续,它们之间可以有空缺。每一个JavaScript数组都有一个length属性。针对非稀疏数组,该属性就是数组元素的个数。针对稀疏数组,length比所有元素的索引要大。

7.2 数组元素和读和写

数组是对象的特殊形式。使用方括号方位数组元素就像用方括号访问对象的属性一样。JavaScript将指定的数字索引值转化成字符串——索引值1变成“1”——然后将其作为属性名来使用。

7.4 数组长度

如果为一个数组元素赋值,它的索引i大于或等于现有数组的长度时,length属性的值将设置为i+1。

设置length属性为一个当前长度的非负整数n时,当前数组中那些索引值大于或者等于n的元素将从中删除。

7.5 数组元素的添加和删除

arr.push(“one”,“two”):在数组尾部添加一个元素或多个元素,并返回数组新的长度。

arr.pop():它删除数组的最后一个元素,减少数组长度并返回它删除的值。

比较:将数组当做栈来使用。都修改并替换原始数组而非生成一个修改版的新数组。

arr.shift()和shift():数组头部进行元素的插入和删除操作。

7.6 数组遍历

//排除null、undefined和不存在的元素
for(var i=0;i<a.length;i++){
if(!a[i]) continue;
//循环体
} /**
*注意for/in循环能够枚举继承的属性名,如添加到Array.prototype中的
*方法。由于这个原因,数组上不应该使用for/in循环,除非使用额外的检测
*方法来过滤不想要的属性。如下:
*/ for(var i in a){
if(!a.hasOwnProperty(i)) continue; //跳过继承的属性
//循环体
}

7.8 数组方法(只介绍部分)

1. Array.join():将数组中所有元素都转化为字符串并连接在一起,返回最后胜出的字符串。可以指定分隔符,默认逗号。

它的逆向操作:String.split():将字符串分割成若干块创建一个数组。

2. Array.reverse():将数组中的元素颠倒顺序,返回逆向的数组。在原先的数组中重新排列它们(不是创建新的数组)。

//使用reverse()和join()方法生成字符串“3,2,1”
var a=[1,23];
a.reverse().join() //=>"3,2,1" 并且现在a=[3,2,1]

第8章 函数

8.1 函数的定义

函数声明语句“被提前”到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被在它定义之前出现的代码所调用。不过,以表达式定义的函数就另当别论了,为了调用一个函数,必须要能引用它,而要使用一个以表达式方式定义的函数之前,必须把它赋值给一个变量。

总结:变量的声明提前了,但给变量赋值是不会提前的,所以以表达式方式定义的函数在定义之前无法调用。

8.2 函数调用

this误区一:

误以为调用嵌套函数时this会指向调用外层函数的上下文。如果想访问这个函数的this,需要将this的值保存在一个变量里,这个变量和内部函数都在一个作用域内。通常使用变量self来保存this,如下:

var o={
m:function(){
var self=this; //将this的值保存至一个变量中
console.log(this===o); //输出true ,this就是这个对象o
f(); //调用辅助函数f() function f(){
console.log(this===o);//"false":this的值是全局对或undefined
console.log(self===o);//"true":self指外部函数的this值
}
}
};

8.3 函数的实参和形参

8.3.1 可选参数

当调用函数的时候传入的实参比函数声明时指定的参数个数要少,剩下的形参都将设置为undefined值。因此在调用函数时形参是否可选以及是否可以省略应当保持较好的适应性。为了做到这一点,应当给省略的参数赋一个合理的默认值,见如下例子:

//将对象o中可枚举的属性名追加至数组a中,并返回这个数组a
//如果省略a,则创建一个新数组并返回这个新数组
function getPropertyNames(o, /* optional */ a){
a=a || [];
for(var property in o ) a.push(property);
return a;
} //这个函数调用可以传入1个或2个实参
var a=getPropertyNames(o); //将o的属性存储到一个新数组中
getPropertyNames(p,a); //将p的属性追加至数组a中

JavaScrip学习之路的更多相关文章

  1. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  2. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  3. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  4. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  5. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  6. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  7. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  8. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  9. 踏上Salesforce的学习之路(一)

    相信通过前面的学习,大家已经拥有了一个属于自己的Salesforce开发者账号,下面,我们将用这个账号正式踏上Salesforce的学习之路. 首先,点击网址:https://developer.sa ...

随机推荐

  1. Linux内核宏DEVICE_ATTR使用

    1.前言 在Linux驱动程序编写中,使用DEVICE_ATTR宏,可以定义一个struct device_attribute设备属性,并使用sysfs的API函数,便可以在设备目录下创建出属性文件, ...

  2. ELK学习笔记之Kibana安装配置

    Kibana 是一个开源的分析和可视化平台,是ELK的重要部分.Kibana提供搜索.查看和与存储在 Elasticsearch 索引中的数据进行交互的功能.开发者或运维人员可以轻松地执行高级数据分析 ...

  3. .net core mvc启动顺序以及主要部件3-Startup

    前面分享了.net core Program类的启动过程已经源代码介绍,这里将继续讲Startup类中的两个约定方法,一个是ConfigureServices,这个方法是用来写我们应用程序所依赖的组件 ...

  4. 动软软件 生成 实体类模板(EnterpriseFrameWork框架)

    1.废话不多说,直接上效果图 . 2 .动软模板代码 <#@ template language="c#" HostSpecific="True" #&g ...

  5. Docker安装Consul集群

    Docker 安装Consul集群 使用windows 环境,Docker desktop community 构建consul集群. 1.docker 容器网络 docker安装后,默认会创建三种网 ...

  6. mvc_1_ex_stu_manage

    Mvc第一遍结束综合练习:带权限的学生管理系统程序的设计应该根据功能来进行.先来设想一下本练习的程序功能:学生信息管理.登录用户区分权限.出错应该给出提示.由此可以设想,完成以后的程序是下图的样子:主 ...

  7. Java自学-数字与字符串 字符串转换

    Java中把数字转换为字符串,字符串转换为数字 步骤 1 : 数字转字符串 方法1: 使用String类的静态方法valueOf 方法2: 先把基本类型装箱为对象,然后调用对象的toString pa ...

  8. Java自学-接口与继承 对象转型

    Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...

  9. HTML5实现无刷新修改URL

    前言 今天在做一个vue的搜索功能,需要从搜索结果页面跳转到细节页面,然后点击返回还能返回到刚刚的结果页面,如果只用window.history.go(-1)当然会重新刷新搜索页面,当然是不行的. 我 ...

  10. 英语bitellos钻石bitellos单词

    大颗粒的钻石叫做bitellos,四大钻石指的就是“摄政王”.“南非之星”.“蓝色希望”和“光明之山”四颗钻石.经过琢磨的钻石光彩夺目.灿烂无比,历来被誉为“宝石之王”,科研领域里大颗粒的钻石叫做bi ...