JavaScript 基础语法总结

HTML,CSS和JavaScript是网页设计的基础。HTML和CSS定义了静态的效果,而JavaScript则可以体现出一些动态的效果。在已经掌握一种或者多种编程语言的基础下,学习JS很容易,下面看看一些基本的使用方法。


1. JavaScript的位置

和CSS类似,我们可以直接写代码块,也可以引用外部文件。理论上,<script src="xxx"></script>可以放在<head>里面,也可以放在<body>里面,但是从效率考虑,如果script的链接比较慢或者错误,<head>里面可能导致整个页面半天加载不出来,因此,我们一般推荐放在<body</body>代码块的底部。如果只是暂时的测试性质的编码,我们甚至可以直接在浏览器上的console上使用。F12或者Inspect ,然后选择console就可以了


2.定义变量

直接写 name=‘james’ 定义了全局变量,如果在函数里面定义,指定一个var 关键字,则表示局部变量


3.数字

 

JS不区分float或者int,不过我们可以通过parseInt或者parsefloat来转换字符

 例如:

1
2
3
4
5
6
          
    a="222.2"
    parseFlaot(a)
    222.2
    parseInt(a)
    222

        

4. 字符串 

这个和其他语言几乎一样,有常见的属性和方法。

                                

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
obj.length                           长度
 
obj.trim()                           移除空白
obj.trimLeft()
obj.trimRight)
obj.charAt(n)                        返回字符串中的第n个字符
obj.concat(value, ...)               拼接
obj.indexOf(substring,start)         子序列位置
obj.lastIndexOf(substring,start)     子序列位置
obj.substring(from, to)              根据索引获取子序列
obj.slice(start, end)                切片
obj.toLowerCase()                    大写
obj.toUpperCase()                    小写
obj.split(delimiter, limit)          分割
obj.search(regexp)                   从头开始匹配,返回匹配成功的第一个位置(g无效)
obj.match(regexp)                    全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,
                                     $数字:匹配的第n个组内容;
                                     $&:当前匹配的内容;
                                     $`:位于匹配子串左侧的文本;
                                     $':位于匹配子串右侧的文本
                                     $$:直接量$符号



实例:跑马灯,不停的循环输出文字 

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="d1">欢迎领导视察工作</div>
<script>
    //定义函数
    function change(){
        //通过id获取标签
        var dd=document.getElementById("d1")
        //控制台可以查看输出,很好的查错方式
        console.log(dd)
        var content=dd.innerText
        console.log(content)
        //获取第一个字符
        var f=content.charAt(0)
        //获取子字符串
        var l=content.substring(1,content.length)
        //字符串拼接
        var new_content=l+f;
        //重新赋值
        dd.innerText=new_content
        console.log(new_content);
    }
    //定时器,每隔1000毫秒执行一下change()
    setInterval('change()',1000)
</script>
</body>


5. 布尔值, true和false,注意是小写


  • ==      比较值相等

  • !=       不等于

  • ===   比较值和类型相等

  • !===  不等于

  • ||        或

  • &&      且


6.  数组,和python的列表差不多。


方法如下,其中splice比较特殊 他有3个参数,第一个参数表示插入的位置,第二个参数表示删除几个值,第三个表示插入的新值。因此splice(0,1)表示删除第一个值,splice(0,0,20)表示第一个值前面插入一个值20


obj.length          数组的大小
 
obj.push(ele)       尾部追加元素
obj.pop()           尾部获取一个元素
obj.unshift(ele)    头部插入元素
obj.shift()         头部移除元素
obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素
                    obj.splice(n,0,val) 指定位置插入元素
                    obj.splice(n,1,val) 指定位置替换元素
                    obj.splice(n,1)     指定位置删除元素
obj.slice( )        切片
obj.reverse( )      反转
obj.join(sep)       将数组元素连接起来以构建一个字符串
obj.concat(val,..)  连接数组
obj.sort( )         对数组元素进行排序


7. 字典  

例如

a={'name':'James','age':30} 

使用和Python一样


8. for循环;for循环有2种形式

第一种形式        

例如直接循环数组,他输出的是索引而不是值

     

1
2
3
4
5
6
7
8
9
10
11
a=[11,22,33,44]
for(var item in a){console.log(item);}
 0
 1
 2
 3
for(var item in a){console.log(a[item]);}
11
22
33
44

     直接循环字典,输出的也是key而不是value

1
2
3
4
5
6
7
8
b={"name":"alex","age":20}
for(var item in b){console.log(item);}
name
age
undefined
for(var item in b){console.log(b[item]);}
alex
20


第二种形式, 就和其他语言一样;不过注意如果要输出字典,因为字典的key的数据类型是无序散乱 因此这里就不适合了

1
2
3
4
5
6
7
8
for(var i=1;i<a.length;i++){console.log(i)}
1
2
3
for(var i=1;i<a.length;i++){console.log(a[i])}
22
33
44


除了for循环,js也支持while循环,这个和其他语言没区别。

基本格式:

1
2
while (条件){
}


9. 条件语句

基本格式:

1
2
3
4
5
6
if(条件){
}
else if(条件)
{}
else{
}


另外一个常见的条件语句是switch,这个东西在Python里面是没有的

例如

1
2
3
4
5
6
7
8
9
10
11
12
name="2"
 switch(name){
            case '1':
                age = 123;
                break;
            case '2':
                age = 456;
                break;
            default :
                age = 777;
        }
456


10. 函数

Javascript里面有3种函数,分别是普通函数,匿名函数和自执行函数。格式如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
普通函数:单独的定义,然后再调用
            function func(){
                 
            }
             
匿名函数:直接在需要调用的地方写函数
            setInterval(function(){
                console.log(123);
             
            },5000)
             
自执行函数(创建函数并且自动执行):
             
             
            (function(arg){
                console.log(arg);
            })(1)



11. 序列化


Python里面可以通过json和pickle把对象转换成字符串,这个过程叫做序列化。json可以转化标准的数据类型,而pickle可以转化自定义的对象;


javascript里面也可以通过json来进行序列化和反序列化。格式是


JSON.stringify()   将对象转换为字符串

JSON.parse()       将字符串转换为对象类型


一个例子是自定义一个字典保存数据,然后序列化之后保存到cookie中。


12. eval

类似的,Python里面有eval和exec来执行表达式。eval执行表达式,有返回值;exec可以执行复杂的代码,但是没有返回值;


Javascript里面的eval则是两者之和,可以执行复杂的表达式和代码,然后返回结果


13. 作用域


======== 1. 以函数作为作用域 (let)=========

        

 其他语言: 以代码块作为作用域

1
2
3
4
5
6
7
8
9
10
11
xo = "alex";
function func(){
    // var xo = 'eric';
    function inner(){
        // var xo = 'tony';
        console.log(xo);
    }
    inner()
}
func()
// 报错

       

        

Python:   以函数作为作用域

情况一:

1
2
3
4
5
6
def func():
    if 1==1:
        name = 'alex'
    print(name)
func()
     // 成功

 情况二:

1
2
3
4
5
6
7
def func():
    if 1==1:
        name = 'alex'
    print(name)
func()
print(name)
        // 报错


 JavaScript:  以函数作为作用域

        

          

1
2
3
4
5
6
7
function func(){
    if(1==1){
        var name = 'alex';
    }
    console.log(name);
}
func()

        

======== 2. 函数的作用域在函数未被调用之前,已经创建 ========

        

1
2
3
4
5
6
        function func(){
            if(1==1){
                var name = 'alex';
            }
            console.log(name);
        }

        

 ====== 3. 函数的作用域存在作用域链,并且也是在被调用之前创建 ========

示例一:

 

1
2
3
4
5
6
7
8
9
10
11
12
xo = "alex";
function func(){
    // var xo = 'eric';
    function inner(){
        // var xo = 'tony';
        console.log(xo);
    }
    inner()
}
func()
------
alex

        

 示例二:


1
2
3
4
5
6
7
8
9
10
11
12
xo = "alex";
function func(){
    var xo = 'eric';
    function inner(){
        console.log(xo);
    }
    return inner;
}
var ret = func()
ret()
----
eric

  


示例三:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
xo = "alex";
function func(){
    var xo = 'eric';
    function inner(){
        console.log(xo);
    }
    var xo = 'tony';
     
    return inner;
}
var ret = func()
ret()
------
tony

        

  ================= 4. 函数内局部变量 声明提前 ==================

      

1
2
3
4
5
6
7
8
9
10
11
12
function func(){
    console.log(xxoo);
}
func();
// 程序直接报错
function func(){
    console.log(xxoo);
    var xxoo = 'alex';
}
解释过程中:var xxoo;
func();
// undefined



14. Javascript面向对象

1
2
3
4
5
6
7
8
9
10
11
12
function Foo(n){
    this.name = n;
    this.sayName = function(){
        console.log(this.name);
    }
}
var obj1 = new Foo('we');
obj1.name
obj1.sayName()
var obj2 = new Foo('wee');
obj2.name
obj2.sayName()

Foo相当于构造函数

this类似于Python里面的self,指代的对象

创建新对象通过new实现


类似的Python代码

1
2
3
4
5
6
7
8
9
class Foo:
    def __init__(self,name):
        self.name = name
         
    def sayName(self):
        print(self.name)
         
obj1 = Foo('we')
obj2 = Foo('wee')


注意他们的区别在于Python把sayName这个方法保存在类里面,而JS会分别在对象里面都保存了一份,因此比较浪费内存。


可以通过创建原型的方式解决这个重复的问题

1
2
3
4
5
6
7
8
9
10
11
12
function Foo(n){
        this.name = n;
    }
    # Foo的原型
Foo.prototype = {
    'sayName'function(){
        console.log(this.name)
    }
}
obj1 = new Foo('we');
obj1.sayName()
obj2 = new Foo('wee');






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1920939,如需转载请自行联系原作者

上一篇:Javascript基础学习之基本语法


下一篇:Java语法基础(一)----关键字、标识符、常量、变量