javascript学习大总结(一)基础部分

原创 Blizzard 随笔 js研究 3053阅读 2014-08-25 17:25:22 举报

[list]
[*]###js基础部分
[/list]##### 1.[color=DarkOrange][backcolor=White]JScript 的变量[/bgcolor][/color]
变量在第一次用到时就设置于内存中,便于后来在脚本中引用。使用变量之前先进行声明。可以使用 var 关键字来进行变量声明。

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

注:用var进行声明的都是局部变量。

JScript 是一种区分大小写的语言。创建合法的变量名称应遵循如下规则: [list]
[]第一个字符必须是一个 ASCII 字母(大小写均可),或一个下划线(_)。注意第一个字符不能是数字。
[
]#####后面可以跟任意字母或数字以及下划线,但不能是空格
[*]变量名称一定不能是 保留字
[/list]
javascript是一种弱类型语言,###JavaScript 会[/color]#####忽略多余的空格#####。您可以向脚本添加空格,来提高其可读性。

#####var是javascript的保留字,表明接下来是变量说明,变量名是用户自定义的标识符,变量之间用逗号分开。
#####如果声明了一个变量但没有对其赋值,该变量存在,其值为Jscript 值 undefined。[color=DarkOrchid]强制类型转换:[/color]
#####在 Jscript 中,可以对不同类型的值执行运算,不必担心 JScript 解释器产生异常。相反,JScript 解释器自动将数据类型之一改变(强制转换)为另一种数据类型,然后执行运算。例如:
[table=98%]
[tr][td=43%]运算[/td][td=57%]结果[/td][/tr]
[tr][td=43%]数值与字符串相加[/td][td=57%]将数值强制转换为字符串。[/td][/tr]
[tr][td=43%]布尔值与字符串相加[/td][td=57%]将布尔值强制转换为字符串。[/td][/tr]
[tr][td=43%]数值与布尔值相加[/td][td=57%]将布尔值强制转换为数值。[/td][/tr]
[/table]#####
#####要想显式地将字符串转换为整数,使用 parseInt 方法。要想显式地将字符串转换为数字,使用 parseFloat 方法。

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

javascript学习大总结(一)基础部分
/附上一张前辈总结的js变量思维导图/

#####33a1d51550192524bdf2bdaa7abcc707[color=DarkOrchid]------------------------------------------------华丽的分割线----------------------------------------------------------------

2.[color=DarkOrange]js的数据类型[/color][/color]
jscript 有三种->主要数据类型、两种->复合数据类型和两种->特殊数据类型。

主要(基本)数据类型是:
[list]
[]字符串
[
]数值
[]布尔
[/list]复合(引用)数据类型是:
[list]
[
]对象
[]数组
[/list]特殊数据类型是:
[list]
[
]Null
[*]Undefined
[/list]#####字符串数据类型:#####字符串数据类型用来表示 JScript 中的文本[color=Black]。[/color]在js中,虽然双引号("")和单引号('')均可表示字符串,[/color][backcolor=rgb(255, 255, 255)]#####而且它们几乎没有任何区别。但只使用双引号("")来表示字符串被认为是最佳的。[/bgcolor]#####
一个字符串值是排在一起的一串零或零以上的 Unicode 字符(字母、数字和标点符号)。

什么是Unicode?

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

[color=DarkOrchid]数值数据类型:
[color=DarkOrchid][color=Black]我们需要明白一点,[/color][/color][/color]#####JScript 内部将所有的数值表示为浮点值,因此,[color=DarkOrchid][color=Black]在 Jscript 中整数和浮点值没有差别。

[/color][/color]
#####Boolean数据类型:[color=DarkOrchid]布尔(逻辑)只能有两个值:true 或 false。


[color=Red]js数组和对象[/color]: 详情看我这篇文章->javascript学习总结— —数组和对象部分

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

#####Jscript中 typeof 运算符将报告 null 值为 Object 类型,而非类型 null。代码片段 1


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

[color=DarkOrchid]Undefined 数据类型:[/color]
如下情况将返回 undefined 值:
[list]
[]对象属性不存在,
[
]声明了变量但从未赋值。
[/list][color=DarkOrchid]null和undefined的区别:[/color]
[color=DarkOrchid][color=rgb(0, 0, 0)]js 代码
[code]<font color="Black">alert(typeof undefined); //output "undefined"
alert(typeof null); //output "object" </font>[/code][/color][/color][color=DarkOrchid][code]<font color="Black"><font size="2">alert(null == undefined); //output "true" </font></font>
[/code]
[/color]
#####ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。[/color]

[color=rgb(0, 0, 0)]js 代码[/color][color=rgb(0, 0, 0)]
[/color]
[code]alert(null === undefined); //output "false"
alert(typeof null == typeof undefined); //output "false" [/code]
[color=DarkOrchid][color=Black]null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。
[/color][/color]
[color=DarkOrchid]**

javascript学习大总结(一)基础部分*[/color][color=DarkOrchid][color=DarkOrchid][color=Black]附上一张前辈总结的javascript数据类型思维导图。*[/color][color=DarkOrchid][color=Black]

[/color][/color][/color][/color]
[color=DarkOrchid][color=DarkOrchid][color=Black][color=DarkOrchid][color=Black]另外,这里介绍一种比较重要的数据类型——引用数据类型

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

[/color][/color][/color][/color][/color]
[color=rgb(0, 0, 0)]下面我们来演示这个引用数据类型赋值过程[/color][color=rgb(0, 0, 0)]** 

javascript学习大总结(一)基础部分**[/color][color=rgb(0, 0, 0)]  自然,给obj2添加name属性,实际上是给堆内存中的对象添加了name属性,obj2和obj1在栈内存中保存的只是堆内存对象的引用地址,虽然也是拷贝了一份,但指向的对象却是同一个。故而改变obj2引起了obj1的改变。[/color]
#####基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。而引用类型值则是指那些保存在堆内存中的对象,即变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
[color=rgb(0, 0, 0)]####简而言之,堆内存存放引用值,栈内存存放固定类型值。[/color]

javascript学习大总结(一)基础部分[color=DarkOrchid][color=DarkOrchid][color=Black][color=DarkOrchid][color=Black]
[/color][/color][/color][/color][/color]

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

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

[color=DarkOrchid]**

javascript学习大总结(一)基础部分----------------------------------------------华丽的分割线------------------------------------------------------[/color]
##### 3.JScript 的运算符:
[color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]优先级:指运算符的运算顺序,通俗的说就是先计算哪一部分。[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]结合性:同一优先级运算符的计算顺序,通俗的说就是从哪个方向算起,是左到右还是右到左。[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)] [/bgcolor][/color][table=0,rgb(255, 255, 255)]
[tr][td=117] 优先级[/td][td=195] 运算符[/td][td=215] 描述[/td][td=83] 结合性[/td][/tr]
[tr][td=1,21]由高到低排序[/td][td]()[/td][td]括号[/td][td]从左到右[/td][/tr]
[tr][td]++ --[/td][td]递增或递减[/td][td]从右到左[/td][/tr]
[tr][td]![/td][td]逻辑非[/td][td]从右到左[/td][/tr]
[tr][td] / %[/td][td]乘法、除法、取模[/td][td]从左到右[/td][/tr]
[tr][td]+ -[/td][td]加法、减法[/td][td]从左到右[/td][/tr]
[tr][td]+[/td][td]拼接[/td][td]从左到右[/td][/tr]
[tr][td]< <=[/td][td]小于、小于等于[/td][td]从左到右[/td][/tr]
[tr][td]> >=[/td][td]大于、大于等于[/td][td]从左到右[/td][/tr]
[tr][td]= = !=[/td][td]等于、不等于[/td][td]从左到右[/td][/tr]
[tr][td]= = = != =[/td][td]等同(类型相同)、不等同[/td][td]从左到右[/td][/tr]
[tr][td]&[/td][td]按位与[/td][td]从左到右[/td][/tr]
[tr][td]|[/td][td]按位或[/td][td]
[/td][/tr]
[tr][td]^[/td][td]按位异或[/td][td]
[/td][/tr]
[tr][td]~[/td][td]按位非[/td][td]
[/td][/tr]
[tr][td]<<[/td][td]按位左移[/td][td]
[/td][/tr]
[tr][td]>>[/td][td]按位右移[/td][td]
[/td][/tr]
[tr][td]>>>[/td][td]按位右移,左边以0填充[/td][td]
[/td][/tr]
[tr][td]&&[/td][td]逻辑与[/td][td]从左到右[/td][/tr]
[tr][td]| |[/td][td]逻辑或[/td][td]从左到右[/td][/tr]
[tr][td]?:[/td][td]三元条件表达式[/td][td]从右到左[/td][/tr]
[tr][td]= += -=
= %= <<= >>=[/td][td]赋值[/td][td]从右到左[/td][/tr]
[/table]
其他常见的就不说了,等下附上一张思维导图吧。
[color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]
数据类型转换[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]String() 转换为字符串类型[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]Number() 转换为数字类型[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]Boolean() 转换为布尔类型[/bgcolor][/color]
[color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]
parseInt:将字符串转换为整数。从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:parseInt(“150 hi”)返回的值是:150,parseInt("hi")返回的值是:NaN。[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)] [/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]parseFloat:将字符串转换为浮点数。 从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:parseFloat("15.5 hi") 返回的值是:15.5,parseFloat("hi 15.5")返回的值是:NaN。[/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)] [/bgcolor][/color][color=rgb(51, 51, 51)][backcolor=rgb(255, 255, 255)]eval:将字符串作为javascript表达式进行计算,并返回执行结果,如果没有结果则返回undefined。*[/bgcolor][/color]
[attachimg]
[color=DarkOrchid][color=Black]
附上一张前辈总结的js运算符思维导图。*

**

javascript学习大总结(一)基础部分[/color][/color][color=DarkOrchid][color=DarkOrchid]----------------------------------------------华丽的分割线--------------------------------------------------------**

[color=DarkOrange] 4.js流程控制
[/color]
[color=Black]对于js流程控制语句,这里只讲几个比较难懂的。其他不赘述。等下附上一张思维导图。[/color][/color][/color]

1.for...in 语句对应于一个对象的每个,或一个数组的每个元素,执行一个或多个语句。

[code]for (variable in [object | array])
statements [/code]参数:

variable:必选项。一个变量,它可以是 object 的任一属性或 array 的任一元素。 object, array:可选项。要在其上遍历的对象或数组。statement:可选项。相对于 object 的每个属性或 array 的每个元素,都要被执行的一个或多个语句。可以是复合语句
[color=DarkOrchid]*[color=Black]附上一张前辈总结的js流程控制语句*思维导图

javascript学习大总结(一)基础部分[/color][/color][color=DarkOrchid][color=DarkOrchid]----------------------------------------------华丽的分割线-----------------------------------------------------**

5.js函数
[/color][/color]函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

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

[/bgcolor]
[backcolor=rgb(255, 255, 255)]下面的例子中,就向 hello() 函数传递了 name 和 age 参数,参数值分别是 trigkit4 和 21。[/bgcolor]
代码片段 2

我们可以将函数形象的比喻成带有入口(进料)和出口(产出)的咖啡机。
#####所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理;所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。
[color=rgb(0, 0, 0)]  1.当函数无明确返回值时,返回的值就是"undefined"。[/color][color=rgb(0, 0, 0)]  2.当函数有返回值时,返回值是什么就返回什么。[/color]
#####匿名函数与闭包:

创建匿名函数:
[code]function(){
return ‘Lee’; //单独的匿名函数是无法运行的,就算能运行也无法调用,因为无法调用
}
[/code]这种匿名函数的用法在JQuery中非常多直接声明一个匿名函数,立即使用。用匿名函数的好处就是省得定义一个用一次就不用的函数,而且免了命名冲突的问题,js中没有命名空间的概念,因此很容易函数名字冲突,一旦命名冲突以最后声明的为准。

通过自我执行来执行匿名函数
[code]//通过自我执行来执行匿名函数

<script type="text/javascript">
(function (){ // (匿名函数)();第一圆括号放匿名函数,第二个圆括号执行
alert('Lee');
})();
</script>
[/code]
把匿名函数自我执行的返回值赋给变量:
[code]//把匿名函数自我执行的返回值赋给变量

<script type="text/javascript">
var box = (function (){
alert('Lee');
})();
alert(box); //弹出”Lee”;
</script>
[/code]
自我执行匿名函数的传参:
[code]//自我执行匿名函数的传参

<script type="text/javascript">
(function (age){
alert(age);
})(100); //弹出100
</script>
[/code]
函数里放一个匿名函数:
[code]//函数里放一个匿名函数

<script type="text/javascript">
function box(){
return function(){ //闭包return ‘Lee’;}
}

alert(box()()); //弹出Lee;去运行下alert(box);和alert(box());
</script>
[/code]由此产生了闭包。关于闭包的知识,详情请见我的另一篇文章:详解js闭包

[color=Green]javascript创建动态函数:[/color][color=rgb(0, 0, 0)]  JavaScript支持创建动态函数,动态函数必须用Function对象来定义(Function是javascript中的一个对象,是固定不变的,规定**Function对象的"F"必须大写,当是function的时候,我们知道是定义函数的时候所使用的一个关键字:function funName(x,y),当是Function的时候(F大写的时候),我们知道是javascript中的对象)[/color]创建动态函数的基本格式:[color=rgb(255, 0, 0)]var 变量名 = new Function("参数1","参数2","参数n","执行语句");[/color]**

看下面的一段代码:
[code] <script type="text/javascript">
2 var square = new Function ("x","y","var sum ; sum = x+y;return sum;");
3 alert("square(2,3)的结果是:"+square(2,3)); //square(2,3)的结果是:5
4 </script>[/code] square是动态创建的函数,在Function对象后面的括号里的每一部分内容都必须是字符串形式的,也就是说都必须用引号(""或者是'')括起来

这段代码:
[code]var square = new Function ("x","y","var sum ; sum = x+y;return sum;");[/code]
和下面这段代码:
[code] function square (x,y){
var sum;
sum = x+y;
return sum;
}[/code]
是一摸一样的,只不过一个是动态函数,一个是静态函数。
我们为什么要把代码分成一小段一小段的代码呢?,[color=rgb(255, 0, 0)]把一个字符串分成了若干个独立的字符串的优点就在**于我们可以通[/color][color=rgb(255, 0, 0)]过修改其中的某些字符串来随时改变函数的作用。**[/color]

关于回调函数:

回调函数:

#####回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。[/bgcolor][/p]
[/color]

[backcolor=rgb(255, 255, 255)]#####这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。[/bgcolor]#####关于方法和函数的区别:
[code]var arr = [1,2,3,4,5]
var a =12; // 变量:自由的
arr.a= 5; //属性:属于一个对象
function show() //函数:自由的
{
alert(‘a’);
}
arr.fn = function() //方法:属于一个对象
{
alert(‘b’);
}[/code][color=rgb(55, 62, 68)]其实方法就是函数,只不过方法是有所属的对象。

[/color][/bgcolor][backcolor=rgb(255, 255, 255)][color=rgb(55, 62, 68)]对象的组成[/color][/bgcolor]
[list]
[][color=#373E44]方法——函数:过程、动态的

[
]属性——变量:状态、静态的
[/list][/color][/color]
最后,再附上一张前辈总结的思维导图:

我的新博客:http://segmentfault.com/u/trigkit4 (这上面的排版比前端网好些,更有利于阅读) 偶会不定时更新前端技术文章 欢迎前来阅读

前端交流QQ群:[color=DeepSkyBlue]397586220,欢迎你的加入[/color]

评论 ( 3 )
最新评论