Node.js + MongoDB + AngularJS – 2 Javascript基础

释放双眼,带上耳机,听听看~!

学习node.js时,作为对javascript的复习。不作为详细的基础讲解,只是简单的大体上过一遍。

1. 定义变量

使用 var 关键字


1
2
3
4
1var myData ;
2var myString = 'Some Text' ;
3var newString = myString + ' some More Text' ;
4

命名规则:必须以字母、$或_开头,并且不能包含空格。
区分大小写。

2. 了解Javascript数据类型

  • 字符串(String)


1
2
3
1var myString = 'Some Text' ;
2var anotherString = 'Some More Text' ;
3
  • 数值(Number)


1
2
3
1var myInteger = 1 ;
2var cost = 1.33 ;
3
  • 数组(Array)


1
2
3
1var arr = { 'one', 'two', 'three' } ;
2var first = arr[ 0 ] ;
3
  • 对象字面量(Object)


1
2
3
1var obj = { 'name': 'Brad', 'occupation': 'Hacker', 'age': 'Unknow' } ;
2var name = obj.name ;
3
  • 空(Null)


1
2
1var newVar = null ;
2

注意:Javascript是一种无类型的语言。在脚本中并不需要指定一个变量的数据类型。解释器会自动推算出某个变量的正确数据类型。此外,可以将不同类型的值赋给一种类型的变量。

3. 使用运算符

3.1. 算数运算符


*

/

%
模(除法的余数)
++
递增

递减

注意:也可以使用+运算符来连接字符串或将字符串和数值加在一起。这可以快速连接字符串,以及将数值数据添加到输出字符串。

3.2 赋值运算符

=
x = 5
x = 5
+=
x += 5
x = x + 5
-=
x -= 5
x = x – 5
=
x
=5
x = x * 5
/=
x /= 5
x = x / 5
%=
x %= 5
x = x % 5

3.3. 运用比较和条件运算符

  • 比较运算符

==
等于(只是值)

值和类型都相等
!=
不等于
!==
值和类型都不相等

大于

=

大于或等于
<
小于
<=
小于或等于

  • 逻辑运算符

&&
并且

!

  • if语句


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1if( x == 5 ) {
2    do_something() ;
3}
4
5if( x == 5 ) {
6    do_something() ;
7} else {
8    do_something_else() ;
9}
10
11if( x &lt; 5 ) {
12    do_something() ;
13} else if( x &lt; 10 ) {
14    do_something_else() ;
15} else {
16    do_nothing() ;
17}
18
  • switch语句


1
2
3
4
5
6
7
8
9
10
11
1switch( 表达式 ) {
2case value1:
3    &lt;要执行的代码&gt;
4    break ;
5case value2:
6    &lt;要执行的代码&gt;
7    break ;
8default:
9    &lt;如果不是value1也不是value2要执行的代码&gt;    
10}
11

注意:**switch语句完全计算表达式,得到一个值,这个值可以是字符串、数值、布尔值,甚至是一个对象。
每个case语句都在最后包括break语句,表示从switch语句中断。**

4. 循环

4.1. while


1
2
3
4
5
6
1var i = 1 ;
2while( i &lt; 5 ) {
3    console.log( &#x27;Iteration &#x27; + i ) ;
4    i++ ;
5}
6

4.2. do/while


1
2
3
4
5
6
1var i = 0;
2do {
3    console.log( &#x27;Iteration &#x27; + i ) ;
4    i++ ;
5} while( i &lt;  5 ) ;
6

4.3. for


1
2
3
4
1for( 赋值; 条件; 更新 ) {
2    &lt;要执行的代码&gt;
3}
4

4.4. for/in


1
2
3
4
5
1var days = [ &#x27;Monday&#x27;, &#x27;Tuesday&#x27;, &#x27;Wednesday&#x27;, &#x27;Thursday&#x27;, &#x27;Friday&#x27; ] ;
2for( var idx in days ) {
3    console.log( &#x27;It&#x27;s &#x27; + days[ idx ] + &#x27;&lt;br&gt;&#x27; ) ;
4}
5

4.5. 中断循环

  • break


1
2
3
4
5
6
1var days = [ &#x27;Monday&#x27;, &#x27;Tuesday&#x27;, &#x27;Wednesday&#x27;, &#x27;Thursday&#x27;, &#x27;Friday&#x27; ] ;
2for( var idx in days ) {
3    if( days[ idx ] == &#x27;Wednesday&#x27; ) break ;
4    console.log( &#x27;It&#x27;s &#x27; + days[ idx ] + &#x27;&lt;br&gt;&#x27; ) ;
5}
6
  • continue


1
2
3
4
5
6
1var days = [ &#x27;Monday&#x27;, &#x27;Tuesday&#x27;, &#x27;Wednesday&#x27;, &#x27;Thursday&#x27;, &#x27;Friday&#x27; ] ;
2for( var idx in days ) {
3    if( days[ idx ] == &#x27;Wednesday&#x27; ) continue ;
4    console.log( &#x27;It&#x27;s &#x27; + days[ idx ] + &#x27;&lt;br&gt;&#x27; ) ;
5}
6

5. 创建函数

为了代码重用

5.1. 定义函数

关键字:function


1
2
3
4
5
6
1function myFunction() {
2    console.log( &#x27;Hello World&#x27; ) ;
3}
4
5myFunction() ;
6

5.2. 传递变量给函数


1
2
3
4
5
6
7
8
9
1function greeting( name, city ) {
2    console.log( &#x27;Hello &#x27; + name ) ;
3    console.log( &#x27;. How is the weather in &#x27; + city ) ;
4}
5
6var name = &#x27;Brad&#x27; ;
7
8greeting( name, &#x27;Florence&#x27; ) ;
9

5.3. 函数返回值


1
2
3
4
5
6
7
8
9
10
1function formatGreeting( name, city ) {
2    var retStr = &#x27;&#x27; ;
3    retStr += &#x27;Hello &lt;b&gt;&#x27; + name + &#x27;/n&#x27; ;
4    retStr += &#x27;Welcome to &#x27; + city + &#x27;!&#x27; ;
5    return retStr ;
6}
7
8var greeting = formatGreeting( &#x27;Brad&#x27;, &#x27;Rome&#x27; ) ;
9console.log( greeting ) ;
10

5.4. 匿名函数


1
2
3
4
1console.log( doCalc( 5, 10, function( n1, n2 ) {
2    return n1 + n2 ;
3} ) ) ;
4

匿名函数的好处:不需要正式定义不在代码的其他任何地方使用的东西。因此,匿名函数使javascript代码更简洁已读。

6. 变量作用域


1
2
3
4
5
6
7
8
9
10
11
1var myVar = 1 ;
2function writeIt() {
3    var myVar = 2;
4    console.log( &#x27;Variable = &#x27; + myVar ) ;
5    writeMore() ;
6}
7function writeMore() {
8    console.log( &#x27;Variable = &#x27; + myVar ) ;
9}
10writeIt() ;
11

7. Javascript对象

使用对象而不只是一个函数集合,是编写清洁、高效、可重复使用的Javascript代码的关键。

7.1. 使用对象语法

一个对象实际上只是一个容器,它将多个值和函数组合在一起。对象的值称为属性,对象的函数称为方法。
关键字:new


1
2
1var x = new Number( &#x27;5&#x27; ) ;
2

对象语法:使用对象名称,然后是一个点,然后是属性或方法的名称。


1
2
3
4
5
6
7
8
1var s = myObj.name ;
2myObj.name = &#x27;new Name&#x27; ;
3
4var name = myObj.getName() ;
5myObj.getName = function() {
6    return this.name ;
7}
8

创建对象


1
2
3
4
5
6
7
8
1var obj = {
2    name: &#x27;My Object&#x27;,
3    value: 7,
4    getValue: function() {
5        return this.value;
6    }
7}
8

还可以通过使用 objectpropertyName 的语法来访问Javascript对象的成员。


1
2
3
4
1var propName = &#x27;User Name&#x27; ;
2var val1 = myObj[ propName ] ;
3var val2 = myObj[ &#x27;Other Name&#x27; ] ;
4

7.2. 创建自定义对象

  • 一:


1
2
3
4
5
6
7
1var user = new Object() ;
2user.first = &#x27;Brad&#x27; ;
3user.last = &#x27;DayLey&#x27; ;
4getName = function() {
5    return this.first + &#x27; &#x27; + this.last ;
6}
7
  • 二:


1
2
3
4
5
6
7
8
1var user = {
2    first: &#x27;Brad&#x27;,
3    last: &#x27;Dayley&#x27;,
4    getName: function() {
5        return this.first + &#x27; &#x27; + this.last ;
6    }
7}
8
  • 三:


1
2
3
4
5
6
7
8
9
10
1function User( first, last ) {
2    this.first = first ;
3    this.last = last ;
4    this.getName = function() {
5        return this.first + &#x27; &#x27; + this.last ;
6    }
7}
8
9var user = new User( &#x27;Brad&#x27;, &#x27;Dayley&#x27; ) ;
10

7.3. 使用原型对象模式

在原型中定义的函数只在Javascript加载时被创建一次,而不是每创建一个新的对象时都被创建。


1
2
3
4
5
6
7
8
9
10
1function UserP( first, last ) {
2    this.first = first ;
3    this.last = last ;
4}
5UserP.prototype = {
6    getFullName: function() {
7        return this.first + &#x27; &#x27; + this.last ;
8    }
9}
10

8. 字符串

String对象是迄今为止在Javascript中最常用的对象。在定义一个字符串数据类型的变量的时候,Javascript就自动为你创建一个String对象。

  • String对象的转义码

\’
单引号
\”
双引号

反斜杠
\n
换行符
\r
回车符
\t
制表符
\b
退格符
\f
换页符

  • String对象的方法

charAt( index )
返回指定索引处的字符
charCodeAt( index )
返回指定索引处的Unicode值
concat( str1, str2, … )
连接两个或多个字符串,返回连接后的字符串的副本
fromCharCode()
将Unicode值转换成实际的字符
indexOf( subString )
返回指定的subString 值第一次出现的位置。如果没有找到subString,返回-1
lastIndexOf( subString )
返回指定的subString值最后出现的位置。如果没有找到subString,返回-1
match( regex )
搜索字符串,并返回正则表达式的所有匹配
replace( subString/regex, replacementString )
搜索字符串的字符串或正则表达式匹配,并用新的子串替换新匹配的子串。
search( regex )
基于正则表达式搜索字符串,并返回第一个匹配的位置
slice( start, end )
返回字符串的start和end(不含) 位置之间的部分的一个新字符串
split( sep, limit )
根据分隔符或正则表达式,把字符串分割为子字符串数组。可选的limit参数定义从头开始执行分割的最大数量
substr( start, length )
从字符串置顶的start位置开始,并按照指定的字符长度提取字符
substring( from, to )
返回字符索引在from 与 to(不含) 之间的子串
toLowerCase()
将字符串转换为小写
toUpperCase()
将字符串转换为大写
valueOf()
返回原始字符串值

8.1. 合并字符串

使用 + 操作或使用第一个字符串上的concat()函数将多个字符串合并


1
2
3
4
5
6
7
1var word1 = &#x27;Today &#x27; ;
2var word2 = &#x27;is &#x27; ;
3var word3 = &#x27;tomorrows\&#x27; &#x27; ;
4var word4 = &#x27;yesterday.&#x27; ;
5var sentence1 = word1 + word2 + word3 + word4 ;
6var sentence2 = word1.concat( word2, word3, word4 ) ;
7

8.2. 在字符串中搜索子串


1
2
3
4
5
1var myStr = &#x27;I think, therefore I am.&#x27; ;
2if( myStr.indexOf( &#x27;think&#x27; ) != -1 ) {
3    console.log( myStr ) ;
4}
5

8.3. 在一个字符串中替换单词


1
2
3
4
1var username = &#x27;Brad&#x27; ;
2var output = &#x27;&lt;username&gt; place enter your password: &#x27; ;
3output.replace( &#x27;&lt;username&gt;&#x27;, username ) ;
4

8.4. 将字符串分割为数组


1
2
3
4
5
6
1var t = &#x27;12:10:36&#x27; ;
2var tArr = t.split( &#x27;:&#x27; ) ;
3var hour = tarr[ 0 ] ;
4var minute = tArr[ 1 ] ;
5var sencond = tArr[ 2 ] ;
6

9. 数组

concat( arr1, arr2, … )
返回一个数组和作为参数传递的数组的连接副本
indexOf( value )
返回数组中value的第一个索引。或如果没有找到该条目,返回-1
join( separator )
把一个数组中所有元素连接为由separator分割的单个字符串。如果没有指定分隔符,则使用逗号作为分隔符
lastIndexOf( value )
返回数组中value的最后一个索引。如果没有该条目,返回-1
pop()
删除数组中的最后一个元素,并返回该元素
push( item1, item2, … )
添加一个或多个新元素到数组的结尾,并返回数组的新长度
reverse()
反转数组中所有元素的顺序
shift()
删除数组中的第一个元素,并返回该元素
slice( start, end )
返回start和end索引之间的元素
sort( sortFunction )
对数组进行排序。sortFunction是可选的
splice( index, count, item1, item2,.. )
在index指定的索引处,删除count个条目,然后在index处插入作为参数传入的任意可选条目
toString()
返回一个数组的字符串形式
unshift()
将新元素添加到数组的开头,并返回新的长度
valueOf()
方法返回一个数组对象的原始值

9.1. 合并数组


1
2
3
4
5
1var arr1 = [ 1, 2, 3 ] ;
2var arr2 = [ &#x27;three&#x27;, &#x27;four&#x27;, &#x27;five&#x27; ] ;
3var arr3 = arr1 + arr2 ;
4var arr4 = arr1.concat( arr2 ) ;
5

9.2. 遍历数组


1
2
3
4
5
6
7
8
1var week = [ &#x27;Monday&#x27;, &#x27;Tuesday&#x27;, &#x27;Wednesday&#x27;, &#x27;Thursday&#x27;, &#x27;Friday&#x27; ] ;
2for( var i = 0; i &lt; week.length, i++ ) {
3    console.log( &#x27;&lt;li&gt;&#x27; + week[ i ] + &#x27;&lt;/li&gt;&#x27; ) ;
4}
5for( dayIndex in week ) {
6    console.log( &#x27;&lt;li&gt;&#x27; + week[ dayIndex ] + &#x27;&lt;/li&gt;&#x27; ) ;
7}
8

9.3. 数据转换为字符串


1
2
3
1var timeArr = [ 12, 10, 36 ] ;
2var timeStr = timeArr.join( &#x27;:&#x27; ) ;
3

9.4. 检查数组是否包含摸个条目


1
2
3
4
5
6
7
1function message( day ) {
2    var week = [ &#x27;Monday&#x27;, &#x27;Tuesday&#x27;, &#x27;Wednesday&#x27;, &#x27;Thursday&#x27;, &#x27;Friday&#x27; ] ;
3    if( week.indexOf( day ) != -1 ) {
4        console.log( &#x27;Happy &#x27; + day ) ;
5    }
6}
7

10. 错误处理

关键字: try/catch/finally

10.1. try/catch


1
2
3
4
5
6
1try{
2    var x = badVarName ;
3} catch( err ) {
4    console.log( err.name + &#x27;: &quot;&#x27; + err.message + &#x27; &quot; occurred when assigning x.&#x27; ) ;
5}
6

10.2. 抛出自己的错误


1
2
3
4
5
6
7
8
9
10
11
1function sqrRoot( x ) {
2    try {
3        if( x == &#x27;&#x27; ) throw { message: &quot;can&#x27;t Square Root Nothing&quot; } ;
4        if( isNaN(x) ) throw { message: &quot;can&#x27;t Square Root Strings&quot; } ;
5        if( x &lt; 0 ) throw { message: &quot;Sorry No Imagination&quot; } ;
6        return &quot;sqrt( &quot; + x + &quot; )&quot; + Math.sqrt( x ) ;
7    } catch ( err ) {
8        return err.message ;
9    }
10}
11

10.3. finally


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1function testTryCatch( value ) {
2    try {
3        if( value &lt; 0 ) {
4            throw &#x27;too small&#x27; ;
5        } else if( value &gt; 10 ) {
6            throw &#x27;too big&#x27; ;
7        }
8        your code here ;
9    } catch ( err ) {
10        console.log( &#x27;The number was &#x27; + err ) ;
11    } finally {
12        console.log( &#x27;This is always written&#x27; ) ;
13    }
14}
15

给TA打赏
共{{data.count}}人
人已打赏
安全技术

RSA加密算法

2021-8-18 16:36:11

安全技术

C++ 高性能服务器网络框架设计细节

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索