JavaScript学习总结(一)基础部分

转自:http://segmentfault.com/a/1190000000652749

基本概念

javascript是一门解释型的语言,浏览器充当解释器。
js执行引擎并不是一行一行的执行,而是一段一段的分析执行。

延迟脚本

HTML4.0.1中定义了defer属性,它的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会延迟到整个页面都解析完毕后再执行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。在XHTML文档中,要把defer属性设置为defer=“defer",目前只有 Internet Explorer 支持 defer 属性。

异步脚本

html5<script>定义了async属性。整个属性与defer属性类似,都用于改变处理脚本的行为。同样,与defer类似,async只适用于外部脚本文件,并告诉浏览器立即下载文件。但与defer不同的是,标记为async的脚本并不保证按照指定他们的先后顺序执行。
指定async的目的是不让页面等待脚本文件下载和执行,从而异步加载页面其他内容。因此,建议异步脚本不要再加载期间操作DOM

区分大小写

ECMASCript中的一切(包括变量,函数名和操作符)都区分大小写。

1. 变量

变量在第一次用到时就设置于内存中,便于后来在脚本中引用。使用变量之前先进行声明。可以使用 var 关键字来进行变量声明。

var count, amount, level; // 用单个 var 关键字声明的多个声明。

变量命名

变量名包括全局变量,局部变量,类变量,函数参数等等,他们都属于这一类。

变量命名都以类型前缀+有意义的单词组成,用驼峰式命名法增加变量和函式的可读性。例如:sUserName,nCount。

前缀规范:
每个局部变量都需要有一个类型前缀,按照类型可以分为:

s:表示字符串。例如:sName,sHtml;
n:表示数字。例如:nPage,nTotal;
b:表示逻辑。例如:bChecked,bHasLogin;
a:表示数组。例如:aList,aGroup;
r:表示正则表达式。例如:rDomain,rEmail;
f:表示函数。例如:fGetHtml,fInit;
o:表示以上未涉及到的其他对象,例如:oButton,oDate;
g:表示全局变量,例如:gUserName,gLoginTime;

JScript 是一种区分大小写的语言。创建合法的变量名称应遵循如下规则:

注意第一个字符不能是数字。
后面可以跟任意字母或数字以及下划线,但不能是空格
变量名称一定不能是 保留字。

javascript是一种弱类型语言,JavaScript 会忽略多余的空格。您可以向脚本添加空格,来提高其可读性。

varjavascript的保留字,表明接下来是变量说明,变量名是用户自定义的标识符,变量之间用逗号分开。

如果声明了一个变量但没有对其赋值,该变量存在,其值为Jscript 值 undefined

强制类型转换

在 Jscript 中,可以对不同类型的值执行运算,不必担心 JScript 解释器产生异常。相反,JScript 解释器自动将数据类型之一改变(强制转换)为另一种数据类型,然后执行运算。例如:

运算                  结果

数值与字符串相加    将数值强制转换为字符串。
布尔值与字符串相加   将布尔值强制转换为字符串。
数值与布尔值相加    将布尔值强制转换为数值。

要想显式地将字符串转换为整数,使用 parseInt 方法。要想显式地将字符串转换为数字,使用 parseFloat 方法。

JavaScript 变量的生存期:当您在函数内声明了一个变量后,就只能在该函数中访问该变量。当退出该函数后,这个变量会被撤销。这种变量称为本地变量。您可以在不同的函数中使用名称相同的本地变量,这是因为只有声明过变量的函数能够识别其中的每个变量。
如果您在函数之外声明了一个变量,则页面上的所有函数都可以访问该变量。这些变量的生存期从声明它们之后开始,在页面关闭时结束。

js变量思维导图


2.js的数据类型

jscript 有三种->主要数据类型、两种->复合数据类型和两种->特殊数据类型。

主要(基本)数据类型

字符串
数值
布尔

复合(引用)数据类型

对象
数组

特殊数据类型

 Null

`Undefined`


字符串数据类型:字符串数据类型用来表示 JScript 中的文本。在js中,虽然双引号("")和单引号(‘‘)均可表示字符串,而且它们几乎没有任何区别。但只使用双引号("")来表示字符串被认为是最佳的。

一个字符串值是排在一起的一串零或零以上的 Unicode 字符(字母、数字和标点符号)。

什么是Unicode?

Unicode为每个字符都提供了唯一的数值,不管是什么平台、什么程序或什么语言。开发unicode是为了给处理世界上存在的所有字符提供统一的编码。

数值数据类型

我们需要明白一点,JScript 内部将所有的数值表示为浮点值,因此,在 Jscript 中整数和浮点值没有差别。

Boolean数据类型

布尔(逻辑)只能有两个值:true 或 false


js数组和对象

详情看我这篇文章->javascript学习总结— —数组和对象部分

Null 数据类型:可以通过给一个变量赋 null 值来清除变量的内容。

Jscript中 typeof 运算符将报告 null 值为 Object 类型,而非类型 null

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <title></title>
 <script type="text/javascript">
     alert(typeof null);
  </script>
</head>
<body>
</body>
</html>

null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

Undefined 数据类型:

如下情况将返回 undefined 值:

对象属性不存在,
声明了变量但从未赋值。

null和undefined的区别

alert(typeof undefined); //output "undefined"
alert(typeof null); //output "object"
alert(null == undefined); //output "true"

ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。

alert(null === undefined); //output "false"
alert(typeof null == typeof undefined); //output "false"

nullundefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false

另外,这里介绍一种比较重要的数据类型——引用数据类型

引用数据类型

javascript引用数据类型是保存在堆内存中的对象,JavaScript不允许直接访问堆内存空间中的位置和操作堆内存空间,只能通过操作对象在栈内存中的引用地址。所以引用类型的数据,在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。

下面我们来演示这个引用数据类型赋值过程

自然,给obj2添加name属性,实际上是给堆内存中的对象添加了name属性,obj2obj1在栈内存中保存的只是堆内存对象的引用地址,虽然也是拷贝了一份,但指向的对象却是同一个。故而改变obj2引起了obj1的改变。

基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。
引用类型值则是指那些保存在堆内存中的对象,即变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
简而言之,堆内存存放引用值,栈内存存放固定类型值。

在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。
原始值存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。引用值存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。

<script type="text/javascript”>
var box = new Object();  //创建一个引用类型
var box = "lee";   //基本类型值是字符串
box.age = 23;    //基本类型值添加属性很怪异,因为只有对象才可以添加属性。
alert(box.age);  //不是引用类型,无法输出;
</script>

3.JScript 的运算符

优先级:指运算符的运算顺序,通俗的说就是先计算哪一部分。
结合性:同一优先级运算符的计算顺序,通俗的说就是从哪个方向算起,是左到右还是右到左。

数据类型转换和基本包装类型

String() 转换为字符串类型
Number() 转换为数字类型
Boolean() 转换为布尔类型

parseInt:将字符串转换为整数。从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:parseInt(“150 hi”)返回的值是:150,parseInt("hi")返回的值是:NaN。
parseFloat:将字符串转换为浮点数。 从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:parseFloat("15.5 hi") 返回的值是:15.5,parseFloat("hi 15.5")返回的值是:NaN。

eval:将字符串作为javascript表达式进行计算,并返回执行结果,如果没有结果则返回undefined。

基本包装类型

每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能调用一些方法来操作这些数据。基本包装类型包括BooleanNumberString

var box = ‘trigkit4‘; //字面量
box.name = ‘mike‘;   //无效属性
box.age = function () { //无效方法
    return 22;
};

//new运算符写法
var box = new String(‘trigkit4‘);//new 运算符
box.name = ‘mike‘;   //有效属性
box.age = function () { //有效方法
    return 22;
};

String类型包含了三个属性和大量的可用内置方法

属性    描述
length :返回字符串的字符长度
Constructor : 返回创建String对象的函数
prototype : 通过添加属性和方法扩展字符串定义


4.js流程控制

对于js流程控制语句,这里只讲几个比较难懂的。其他不赘述。等下附上一张思维导图。
1.for...in 语句对应于一个对象的每个,或一个数组的每个元素,执行一个或多个语句。

for (variable in [object | array])
statements

参数:

variable:必选项。一个变量,它可以是 object 的任一属性或 array 的任一元素。
objectarray:可选项。要在其上遍历的对象或数组。
statement:可选项。相对于 object 的每个属性或 array 的每个元素,都要被执行的一个或多个语句。可以是复合语句。

虽然条件控制语句(如if语句)只在执行多条语句的情况下才要求使用代码块(左花括号"{"开头,右花括号"}"结尾),但最佳实践是始终使用代码块。

if(args)
    alert(args);//容易出错

if(args){
    alert(args);//推荐使用
}


js流程控制语句思维导图


5.js函数

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

Jscript 支持两种函数:一类是语言内部的函数,另一类是自己创建的。
JavaScript 函数允许没有参数(但包含参数的小括号不能省略),也可以向函数传递参数供函数使用。

更多关于函数的知识请访问我的另一篇文章:javascript学习大总结(四)function函数部分

对象的组成

方法——函数:过程、动态的
属性——变量:状态、静态的

最后,再附上一张前辈总结的思维导图:

时间: 2024-12-16 11:08:50

JavaScript学习总结(一)基础部分的相关文章

JavaScript学习笔记——DOM基础 2.1

一.DOM 1.DOM的基本概念 DOM是Document Object Model的缩写,意思是文本对象模型,也就是说,如果没有Document,DOM也就无从谈起.我们可以把创建的网页当作是一个Document对象. JavaScript的对象可以分为三种类型:由用户自定义的对象,由JavaScript本身提供的内建对象,以及由浏览器提供的宿主对象. 顺便提一下BOM(Browser Object Model)和WOM(Window Object Model),其实这两个说的是一种东西,但大

JavaScript学习--Item29 DOM基础详解

看完JavaScript高级程序设计,整理了一下里面的DOM这一块的知识点,比较多,比较碎!DOM在整个页面的地位如图: DOM(文档对象模型)是针对HTML 和XML 文档的一个API(应用程序编程接口).DOM描,绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 1.节点层次 DOM 可以将任何HTML 或XML 文档描绘成一个由多层节点构成的结构.节点分为几种不同的类型,每种类型分别表示文档中不同的信息及(或)标记.每个节点都拥有各自的特点.数据和方法,另外也与其他节点

JavaScript学习笔记——对象基础

javascript对象基础 一.名词解释: 1.基于对象 一切皆对象,以对象的概念来编程. 2.面向对象编程(oop Object oriented programming) A.对象 就是人们要研究的任何事物,不仅能表示具体事物,还能表示抽象的规则,计划或事件. 属性的无序集合,每个属性可以存一个值(原始值,对象,函数) B.对象的属性和行为 属性:用数据值来描述他的状态 行为:用来改变对象行为的方法 C.类 具有相同或相似的性质的对象的抽象就是类.对象的抽象,就是类,类的具体化(实例化)

JavaScript学习笔记——语言基础(1)

1.JavaScript虽然名字里包含Java,但它和Java的交集微乎其微. 2.JavaScript没有输入/输出的概念.它是一个在宿主环境下运行的脚步语言.帮助宿主环境与外界交流.最普遍的宿主就是浏览器,但在Adobe Acrobat,photoshaop,Yahoo的widget中也有JavaScript的解释器. 3.JavaScript的类型图谱如下: 4.JavaScript中的字符串是一些字符序列.它们是Unicode字符序列,每个字符都是由16位数字表示. 5.JavaScri

JavaScript学习笔记——语法基础1.1

一.写在前面的话 1.我们有听说过,在一些地方,会把JavaScript当作入门级编程语言,这是因为它相对易学,易习. 2.JavaScript是一门地地道道的编程语言,既然是一门语言,那就应该有专属于它本身的语法,掌握它的语法势在必行. 3.不要试图去记忆它的所有语法和关键字,事实上,几乎没有人能做到这一点. 4.没有一个人敢说,学JavaScript1年或者几年就能称为不败的神话,坚持下去,会让你走的更远,只有这样,你才可能欣赏到更美的风景. 5.制定一个适合你自己的计划,选择一本适合你的书

JavaScript学习笔记&mdash;&mdash;语言基础(2)

1.当你查询一个不存在的数组索引,结果会是undefined. 2.遍历一个数组可以像下面这样写: for(var i = 0;i < a.length; i++){ //Do something with a[i] }      但这样效率比较低,因为每次循环都会计算一次数组长度.可以修改成: for(var i = 0, len = a.length; i < len; i ++){ //Do something with a[i] }     还有一种更好的写法是: for(var i

【Javascript学习】语言基础

数据类型 javascript数据类型分为两种:基本类型与对象类型 基本类型:数字.字符串.布尔值.null.undefined其中null与undefined代表了各自特殊类型的唯一成员 对象类型:所谓对象类型便是属性的集合,每个属性都是由键值对组成普通的对象时无序键值对,有序的键值对便是我们的数组了 还有一个特殊的对象便是函数函数是具有与他相关联的可执行代码的对象,通过调用函数运行可执行代码并返回结果 若是使用new操作符来新建一个对象我们便称之为构造函数每个构造函数定义了一个类——由构造函

JavaScript学习笔记——1.基础知识

1.在html中使用js <script>do something</script> <script src="test.js"></script> <a href="javascript:do something">Link</a> <button onclick="do something">Button</button> PS:一个html文件中

JavaScript学习笔记——语法基础1.2

一.数组 1.通常情况下,一个变量只能有一个值,若想拥有多个值,就需要使用数组,换句话来说,数组是一个特殊的容器,它可以根据需求存放一个或者多个值.2.数组可以用关键字Array来声明,声明的同时,可以设定它的长度length. var myArray = Array(3); document.write(myArray.length); //输出3 3.我们可以在声明数组的同时对它进行填充,也可以在声明之后进行填充,当然,我们需要对新填充的值指定存放位置,需要注意下标是从0开始计数的. Jav

JavaScript学习笔记——DOM基础 2.6

一.CSS-DOM 1.清楚一个概念 HTML负责的是结构,CSS负责的是样式,JavaScript负责的是动作(行为). 2.style属性 语法:element.style 返回:object style相对于element是一个属性,而style本身是一个对象,它包含了诸多元素的样式. 关于这一点,可以根据后面的例子去理解. 3.获取样式 例子:element.style.fontFamily 返回:style对应属性的值,如fontFamily,返回“Microsoft yahei” 注