JavaScript编程语言

JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。

代码存在形式以及放置的位置

JavaScript存在的形式

<!-- 方式一文件引入 -->
<script src="JS文件"></script>
  
<!-- 方式二页面中直接写 -->
<script>
    Js代码内容
</script>
<!-- 方式一文件引入 -->
<script src="JS文件"></script>
  
<!-- 方式二页面中直接写 -->
<script>
    Js代码内容
</script>

JavaScript放置的位置

  • HTML的head中
  • HTML的body代码块底部(推荐)
    由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。
    建议:非影响整个页面布局的js可以放在body中的最下位置;

例通过输入内容弹出alert框

<body>
    <input type="text" id="user" />
    <input type="button" value="点我" onclick="GetData();">
    <script>
        function GetData() {
            var i = document.getElementById("user")
            alert(i.value);
        }
    </script>
</body>
<body>
    <input type="text" id="user" />
    <input type="button" value="点我" onclick="GetData();">
    <script>
        function GetData() {
            var i = document.getElementById("user")
            alert(i.value);
        }
    </script>
</body>

javascrip变量

JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。
<script>
    name = 'seven';         // 全局变量
    function func(){
        var name = "lin";   // var 局部变量
    }
</script>
<script>
    name = 'seven';         // 全局变量
    function func(){
        var name = "lin";   // var 局部变量
    }
</script>

在JavaScript中的注释:

单行 // 
多行 /*包过内容*/
单行 // 
多行 /*包过内容*/

基本数据类型

  • 原始类型
  • 数字
  • 字符串
  • 布尔值
  • 对象类型
  • "列表"数组
  • "字典"
  • ....

数字(Number)

JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
将其他值转换为数字

parseInt(..)将某值转换成数字,不成功则NaN。

parseFloat(..)将某值转换成浮点数,不成功则NaN。

<script>
    age = "18";           //定义一个变量的字符串 age = "18"
    i = parseInt(age);    //将字符串转化为数字
    z = parseFloat(age);  //将字符串转换为小数类型Float
</script>
<script>
    age = "18";           //定义一个变量的字符串 age = "18"
    i = parseInt(age);    //将字符串转化为数字
    z = parseFloat(age);  //将字符串转换为小数类型Float
</script>
特殊值:

NaN,非数字.可使用 isNaN(num) 来判断。

Infinity,无穷大.可使用 isFinite(num) 来判断。

字符串(String)

字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。

1.定义字符串并通过下标取出相应的值

a="zhangsan"
"zhangsan"
a.charAt(0)
"z"
a.charAt(1)
"h"
a.charAt(2)
"a"
a="zhangsan"
"zhangsan"
a.charAt(0)
"z"
a.charAt(1)
"h"
a.charAt(2)
"a"

2.字符串下标的截取(顾头不顾尾)

a="zhangsan"
a.substring(0,5)
"zhang"
a.substring(0,3)
"zha"
a="zhangsan"
a.substring(0,5)
"zhang"
a.substring(0,3)
"zha"

3.获取字符串的总长度;

a="zhangsan"
a.length
8
a="zhangsan"
a.length
8

4.根据指定的字符串(空格),对内容切割为列表split;

a="zhang san li si"
"zhang san li si"
a.split(" ")
(4) ["zhang", "san", "li", "si"] 
// 获取切割的前2个值
a.split(" ",2)
(2) ["zhang", "san"]
a="zhang san li si"
"zhang san li si"
a.split(" ")
(4) ["zhang", "san", "li", "si"] 
// 获取切割的前2个值
a.split(" ",2)
(2) ["zhang", "san"]

字符串其他常见方法:

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个组内容;
                                     $&:当前匹配的内容;
                                     $`:位于匹配子串左侧的文本;
                                     $':位于匹配子串右侧的文本
                                     $$:直接量$符号
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个组内容;
                                     $&:当前匹配的内容;
                                     $`:位于匹配子串左侧的文本;
                                     $':位于匹配子串右侧的文本
                                     $$:直接量$符号

布尔类型(Boolean)

布尔类型仅包含真假,与Python不同的是其首字母小写

a=true
true
a=false
false
a=true
true
a=false
false

布尔类型判断的符号


  • == 比较值相等
  • != 不等于
  • === 比较值和类型相等
  • !=== 不等于
  • || 或
  • && 且

数组

JavaScript中的数组类似于Python中的列表

1.定义数组

a = [11,222,333,444]
(4) [11, 222, 333, 444]
a = [11,222,333,444]
(4) [11, 222, 333, 444]

2.获取数组的长度length

a = [11,222,333,444]
a.length
4
a = [11,222,333,444]
a.length
4

3.插入、删除或替换数组的元素splice

a = [11,222,333,444]
(4) [11, 222, 333, 444]
// a.splice(起始位置,删除1个数,要插入的值)
a.splice(1,1,99)
[222]
a
(4) [11, 99, 333, 444]
// a.splice(起始位置,删除0个数,要插入的值)在指定的位置增加值
a.splice(1,0,888)
[]
a
(5) [11, 888, 99, 333, 444]
// a.splice(起始位置,删除1个数)只指定删除个数,不指定增加值
a.splice(1,1)
[888]
a
(4) [11, 99, 333, 444]
a = [11,222,333,444]
(4) [11, 222, 333, 444]
// a.splice(起始位置,删除1个数,要插入的值)
a.splice(1,1,99)
[222]
a
(4) [11, 99, 333, 444]
// a.splice(起始位置,删除0个数,要插入的值)在指定的位置增加值
a.splice(1,0,888)
[]
a
(5) [11, 888, 99, 333, 444]
// a.splice(起始位置,删除1个数)只指定删除个数,不指定增加值
a.splice(1,1)
[888]
a
(4) [11, 99, 333, 444]

4.切片(顾头不顾尾)

a
(4) [11, 99, 333, 444]
a.slice(1,3)
(2) [99, 333]
a
(4) [11, 99, 333, 444]
a.slice(1,3)
(2) [99, 333]

5.join在JS中是给数组按照指定的方式拼接(python中是给字符串使用的)

a
(4) [11, 99, 333, 444]
a.join("-")
"11-99-333-444"

6.将2个数组拼接到一起;

a=[11, 99, 333, 444]
(4) [11, 99, 333, 444]
b=["aa","bb","ccc","dddd"]
(4) ["aa", "bb", "ccc", "dddd"]
a.concat(b)
(8) [11, 99, 333, 444, "aa", "bb", "ccc", "dddd"]
a=[11, 99, 333, 444]
(4) [11, 99, 333, 444]
b=["aa","bb","ccc","dddd"]
(4) ["aa", "bb", "ccc", "dddd"]
a.concat(b)
(8) [11, 99, 333, 444, "aa", "bb", "ccc", "dddd"]

常见功能:

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( )         对数组元素进行排序
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( )         对数组元素进行排序

字典

1.定义字典

a={"k1":"v1","k2":"v2","k3":"v3"}
{k1: "v1", k2: "v2", k3: "v3"}
a.k1
"v1"
a={"k1":"v1","k2":"v2","k3":"v3"}
{k1: "v1", k2: "v2", k3: "v3"}
a.k1
"v1"

定时器setInterval

格式

setInterval("执行的代码",间隔时间毫秒)
setInterval("执行的代码",间隔时间毫秒)

1.定义一个定时器,每2秒钟弹出一个alert框

<script>
    // setInterval创建一个定时器,多久执行一次
    // 第一个参数是要执行什么;
    // 第二个参数多久执行一次;2000毫秒,2秒钟
    setInterval("alert(123)",2000)
</script>
<script>
    // setInterval创建一个定时器,多久执行一次
    // 第一个参数是要执行什么;
    // 第二个参数多久执行一次;2000毫秒,2秒钟
    setInterval("alert(123)",2000)
</script>

2.通过定时器中输出console.log信息

<script>
    // function f1()  定义一个函数 f1
    function f1() {
        // 在浏览器Console窗口,打印输出内容一般用于打印招聘信息
        var logs="这里是xxoo招聘,请把简历投放到xxx@ooo.com"
        console.log(logs);
    }
    
    // setInterval 定时器
    setInterval("f1()",2000)
</script>
<script>
    // function f1()  定义一个函数 f1
    function f1() {
        // 在浏览器Console窗口,打印输出内容一般用于打印招聘信息
        var logs="这里是xxoo招聘,请把简历投放到xxx@ooo.com"
        console.log(logs);
    }
    
    // setInterval 定时器
    setInterval("f1()",2000)
</script>

通过定时器setInterval实现轮播标签

1.定义一个div,设定一个id=i1

<div >欢迎大人物莅临指导!</div>
<div >欢迎大人物莅临指导!</div>

2.通过document.getElementById("i1")获取表情内容

tag = document.getElementById("i1")
<div id=?"i1">?欢迎大人物莅临指导!?</div>?
tag
<div id=?"i1">?欢迎大人物莅临指导!?</div>?
tag = document.getElementById("i1")
<div id=?"i1">?欢迎大人物莅临指导!?</div>?
tag
<div id=?"i1">?欢迎大人物莅临指导!?</div>?

3.通过innerText获取标签内的内容(innerText可以获取内容也可以set内容)

content=tag.innerText
"欢迎大人物莅临指导!"
content
"欢迎大人物莅临指导!"
content=tag.innerText
"欢迎大人物莅临指导!"
content
"欢迎大人物莅临指导!"

4.通过下标的截取,从新拼接字符串;将拼接字符串从新赋值给tag.innerText

f=content.charAt(0)
"欢"
l=content.substring(1,content.length)
"迎大人物莅临指导!"
new_content=l+f;
"迎大人物莅临指导!欢"
tag.innerText=new_content
"迎大人物莅临指导!欢"
f=content.charAt(0)
"欢"
l=content.substring(1,content.length)
"迎大人物莅临指导!"
new_content=l+f;
"迎大人物莅临指导!欢"
tag.innerText=new_content
"迎大人物莅临指导!欢"

实现效果

欢迎大人物莅临指导!


实现代码

<body>
<div >欢迎大人物莅临指导!</div>
    
<script>
    function func() {
        // 获取id为 i1 的标签
        var tag=document.getElementById("i1");
        // 获取标签内部的内容
        var content=tag.innerText;
        // 标签的第一个值
        var f=content.charAt(0);
        // 标签的第一个值后的所有值
        var l=content.substring(1,content.length);
        // 拼接新的字符串
        var new_content = l+f;
        // 将值从新赋给 tag.innerText
        tag.innerText = new_content;
    }
    // 0.5秒执行一次
    setInterval("func()",500)
</script>
</body>
<body>
<div >欢迎大人物莅临指导!</div>
    
<script>
    function func() {
        // 获取id为 i1 的标签
        var tag=document.getElementById("i1");
        // 获取标签内部的内容
        var content=tag.innerText;
        // 标签的第一个值
        var f=content.charAt(0);
        // 标签的第一个值后的所有值
        var l=content.substring(1,content.length);
        // 拼接新的字符串
        var new_content = l+f;
        // 将值从新赋给 tag.innerText
        tag.innerText = new_content;
    }
    // 0.5秒执行一次
    setInterval("func()",500)
</script>
</body>

通过定时器,页面显示当前时间

<body>
    <div id="isj"></div>

    <script>
        function currentDate() {
            var da = new Date();

            var year = da.getFullYear();
            var month = da.getMonth()+1;
            var day = da.getDate();

            var hours = da.getHours();
            var minutes = da.getMinutes();
            var seconds = da.getSeconds();

            var txt = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;

            document.getElementById("isj").innerHTML = txt;
        }
        setInterval(currentDate,1000)
    </script>
</body>
<body>
    <div id="isj"></div>

    <script>
        function currentDate() {
            var da = new Date();

            var year = da.getFullYear();
            var month = da.getMonth()+1;
            var day = da.getDate();

            var hours = da.getHours();
            var minutes = da.getMinutes();
            var seconds = da.getSeconds();

            var txt = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;

            document.getElementById("isj").innerHTML = txt;
        }
        setInterval(currentDate,1000)
    </script>
</body>

语句和异常

for循环语句

1.默认循环列表时获取的为下标;

b = ["aa", "bb", "ccc", "dddd"]
        // var 定义的为局部变量
        for(var i in b){
            console.log(i)
        }
0
1
2
3
b = ["aa", "bb", "ccc", "dddd"]
        // var 定义的为局部变量
        for(var i in b){
            console.log(i)
        }
0
1
2
3

2.通过下标值获取相应的值;

b = ["aa", "bb", "ccc", "dddd"]
        // var 定义的为局部变量
        for(var i in b){
            // 通过下标获取值
            console.log(b[i])
        }
aa
bb
ccc
dddd
b = ["aa", "bb", "ccc", "dddd"]
        // var 定义的为局部变量
        for(var i in b){
            // 通过下标获取值
            console.log(b[i])
        }
aa
bb
ccc
dddd

3.默认循环字典获取的是key值:

a = {k1: "v1", k2: "v2", k3: "v3"}
        for(var i in a){
            console.log(i)
        }
k1
k2
k3
a = {k1: "v1", k2: "v2", k3: "v3"}
        for(var i in a){
            console.log(i)
        }
k1
k2
k3

4.通过key获取相应的值:

a = {k1: "v1", k2: "v2", k3: "v3"}
        for(var i in a){
            console.log(a[i])
        }
v1
v2
v3
a = {k1: "v1", k2: "v2", k3: "v3"}
        for(var i in a){
            console.log(a[i])
        }
v1
v2
v3

5.通过表达式形式写for循环

for (var i=0;i<10;i++){
            
}
for (var i=0;i<10;i++){
            
}

if条件语句

单条件语法:

if(条件){

}else{

}
if(条件){

}else{

}

多条件语法:

if(条件){

}else if(条件){

}else if(条件){

}else{

}
if(条件){

}else if(条件){

}else if(条件){

}else{

}

函数

基础函数

JavaScript中函数基本上可以分为一下三类:
1.普通函数

// 普通函数 function 函数名(形参){语句}
function func(arg){
    return true;
}
// 普通函数 function 函数名(形参){语句}
function func(arg){
    return true;
}

2.匿名函数,没有名字的函数

setInterval(function(){
    console.log(123);
},5000)
setInterval(function(){
    console.log(123);
},5000)

3.自执行函数,从上往下解释时候,自动执行
格式:

(function(形参){
        console.log(形参);
    })(实参)
    (function(形参){
        console.log(形参);
    })(实参)

示例:

(function(arg){
    console.log(arg);
})('123')
(function(arg){
    console.log(arg);
})('123')

序列化

常用于用户向后台发送数据的时候,返回的值都为字符串,拿到字符串后需要反序列化将字符串转换为列表进行循环操作;
  • JSON.stringify(obj) 序列化
  • JSON.parse(str) 反序列化

1.将列表序列化为字符串

li=[11,22,222,333,444,555]
(6) [11, 22, 222, 333, 444, 555]

str_li=JSON.stringify(li)
"[11,22,222,333,444,555]"
li=[11,22,222,333,444,555]
(6) [11, 22, 222, 333, 444, 555]

str_li=JSON.stringify(li)
"[11,22,222,333,444,555]"

2.将字符串反序列化为列表

new_li = JSON.parse(str_li)
(6) [11, 22, 222, 333, 444, 555]

new_li
(6) [11, 22, 222, 333, 444, 555]
new_li = JSON.parse(str_li)
(6) [11, 22, 222, 333, 444, 555]

new_li
(6) [11, 22, 222, 333, 444, 555]

转义

  • decodeURI( ) URl中未转义的字符
  • decodeURIComponent( ) URI组件中的未转义字符
  • encodeURI( ) URI中的转义字符
  • encodeURIComponent( ) 转义URI组件中的字符
  • escape( ) 对字符串转义
  • unescape( ) 给转义字符串解码
  • URIError 由URl的编码和解码方法抛出

1.将URL中的中文转换为%字符串

url="https://www.sogou.com/web?query=叨客厨子"
"https://www.sogou.com/web?query=叨客厨子"
new_url = encodeURI(url)
"https://www.sogou.com/web?query=%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"
url="https://www.sogou.com/web?query=叨客厨子"
"https://www.sogou.com/web?query=叨客厨子"
new_url = encodeURI(url)
"https://www.sogou.com/web?query=%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"

2.将%号字符串,转换为中文

decodeURI(new_url)
"https://www.sogou.com/web?query=叨客厨子"
decodeURI(new_url)
"https://www.sogou.com/web?query=叨客厨子"

3.将URL中的//也转换为%字符

a = encodeURIComponent(url)
"https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"
a = encodeURIComponent(url)
"https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"

4.将%字符串转换回中文

decodeURIComponent(a)
"https://www.sogou.com/web?query=叨客厨子"
decodeURIComponent(a)
"https://www.sogou.com/web?query=叨客厨子"

Date时间对象

获取日期和时间
getDate()                 获取日
getDay ()                 获取星期
getMonth ()               获取月(0-11)
getFullYear ()            获取完整年份
getYear ()                获取年
getHours ()               获取小时
getMinutes ()             获取分钟
getSeconds ()             获取秒
getMilliseconds ()        获取毫秒
getTime ()                返回累计毫秒数(从1970/1/1午夜)
获取日期和时间
getDate()                 获取日
getDay ()                 获取星期
getMonth ()               获取月(0-11)
getFullYear ()            获取完整年份
getYear ()                获取年
getHours ()               获取小时
getMinutes ()             获取分钟
getSeconds ()             获取秒
getMilliseconds ()        获取毫秒
getTime ()                返回累计毫秒数(从1970/1/1午夜)

时间常见的格式

var D = new Date()
Mon Oct 16 2017 00:05:15 GMT+0800 (中国标准时间)

D.toISOString();
"2017-10-15T16:05:15.267Z"

D.toJSON()
"2017-10-15T16:05:15.267Z"

D.toLocaleDateString()
"2017/10/16"

D.toLocaleString()
"2017/10/16 上午12:05:15"

D.toTimeString()
"00:05:15 GMT+0800 (中国标准时间)"

D.getFullYear()+"-"+(D.getMonth()+1)+"-"+(D.getDate())
"2017-10-16"

作用域

  1. JavaScript以函数作为作用域;
  2. 函数的作用域在函数未被调用之前,已经创建;
  3. 函数的作用域存在作用域链,并且也是在被调用之前就创建;
  4. 函数内局部变量,会提前声明,但不会提前赋值;