js语言学习

JavaScript概述

js即javascript,独立的语言,浏览器具有js解释器,一般和html一起用

js主要包括三块

  • 核心(ECMAScript) 
  • 文档对象模型(DOM) Document object model (整合js,css,html)
  • 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
  • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象
  • 操作的是一个个的html标签  每个标签都是一个对象

简单地说,ECMAScript 描述了以下内容:

  • 语法 
  • 类型 
  • 语句 
  • 关键字 
  • 保留字 
  • 运算符 
  • 对象 (封装 继承 多态) 基于对象的语言.使用对象.

javascript代码的引入方式

可以存在head中,和body中,一般放在body内部的最底部,先解释静态的html语言,然后再加载js动态效果。

方式一:
<script> //javascript代码 alert(123); </script>
方式二: <script type="text/javascript"> //默认就是type="text/javascript" 要想让浏览器按照js解释,这里也只能是这个 //javascript代码 alert(123); </script>
方式三: <script src="js文件的路径,也可以是url"></script> //啦啦啦啦啦啦,这种是以后的规范哦

注释

单行注释 //
多行注释 /*  */

 变量

python:

  name=alex

js:

  name='alex' #全局变量

  var name='alex' #局部变量
    #为了以防全局和局部分不清楚,定义变量的时候就都定义成局部的,加上var,然后最后斟酌是否那个需要成为全局变量,用到全局变量的也很少
//来让我们一下子定义多个吧
var name='alex',age=18,sex='man'; //逗号隔开哦 分号分号 要专业哦

写js代码

  -html文件内编写

  -临时,可以在浏览器 F12 console里写,直接出效果

基本的数据类型

学习一门语言有些是必须要有的哦   数字  字符串  布尔

1.数字 number

在js中不区分整数和浮点数,js中所有数字均用浮点数表示。

转换:

  parseInt()  将某值转换为数字,不成功择NaN

  parseFloat() 将某值转换为浮点数,不成功择NaN

 

age='18'
age_new=parseInt(age)
age_fo=parseFloat(age)

2. 字符串 string

常用方法

1.obj.charAr(num_index) 根据索引取出对应的字符

a='alex'
"alex"
a.charAt(1)
"l"

2.obj.substring(num1,num2) 或 obj.slice(num1,num2 )根据索引范围取出对应的字符范围,顾头不顾尾 [) 

a='alex'
"alex"
a.substring(1,3)
"le"
a.slice(1,3)
"le"

3. obj.length 截取长度

a='alex'
"alex"
a.length 
4

4.obj.trim() 去除空白 

a='alex  \n \r '
"alex"
a.trim()
"alex"
obi.trimLeft()去除左边的空白
obj.trimRight()去除右边的空白

5.obj.concat(value,...) 字符串拼接 一般这里可以用+号

a='alex'
"alex"
a.concat('eric')
"alexeric"

6.obj.indexOf()根据字符列出索引位置  从前往后

a='alex'
a.indexOf('l')
1
a.indexOf('le')
1
a.indexOf('ex')
2

7. 大小写转换

a='alex'
a.toLowerCase()
"alex"
a.toUpperCase()
"ALEX"

8.obj.split 分割

a='alexalex'
"alexalex"
a.split('e')
(3) ["al", "xal", "x"]
a.split('e',1)
["al"]
a.split('e',2)
(2) ["al", "xal"]

 定时器 setInterval

1.举例1
//定义定时器 
<script>
  setInterval('alert(123);',2000);  //执行内容  间隔时间  每隔2秒就执行一次alert(123)
</script>
2.举例2
<script>
    //定义函数
    function f1() {
        console.log('hello')//在浏览器的console里 打印hello


    }
    
  setInterval('f1();',2000); //每两秒执行一次函数f1
</script>

跑马灯实例

<div id="i1">欢迎老男孩莅临指导</div>
<script>
    function func() {
            //根据id获取标签内容,定义局部变量接受
        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=new_content;

    }

setInterval('func();',1000);

</script>

在浏览器console里测试   前提是文件里有 <div id="i1">欢迎老男孩莅临指导</div>

 

 3.布尔 Boolean

true false 要小写 和python区别开来

== 比较值相等

!== 不等于

=== 比较值和类型相等

!===不等于

|| 或

&& 且

4.数组 object array

js中的数组类似于python中的列表

var a=[11,22,33,44,55] //创建数组 记得加上var
(5) [11, 22, 33, 44, 55]
console.log(a,typeof a)  //查看类型 object
VM1426:1 (5) [11, 22, 33, 44, 55] "object" 

数组常用的方法

1. obj.join() 将数组元素拼接成字符串

a='alexalex'
"alexalex"
a.split('e')
(3) ["al", "xal", "x"]
a.split('e',1)
["al"]
a.split('e',2)
(2) ["al", "xal"]

2. concat 插入数据

var a=[11,22,33,44,55,66]
undefined
a
(6) [11, 22, 33, 44, 55, 66]
var b=a.concat(99,88,77)
undefined
b
(9) [11, 22, 33, 44, 55, 66, 99, 88, 77]

3. reverse sort 数组排序

a
(6) [66, 55, 44, 33, 22, 11]
a.sort()  //从小到大
(6) [11, 22, 33, 44, 55, 66]
a.reverse() //从大到小
(6) [66, 55, 44, 33, 22, 11]

4.slice 数组切片

顾头不顾尾

var a=['a','b','c','d','e']
undefined
a
(5) ["a", "b", "c", "d", "e"]
var b=a.slice(1,4)
undefined
b
(3) ["b", "c", "d"]
var b=a.slice(1,)
undefined
b
(4) ["b", "c", "d", "e"]
var b=a.slice(1,-1)
undefined
b
(3) ["b", "c", "d"]

5. splice 删除或者替换数组里的元素

obj.splice(start,deleteCount,value, ... ) 起始位置 删除个数 要插入的值    插入,删除或替换数组的元素
                            obj.splice(n,0,val) 指定位置插入元素
                            obj.splice(n,1,val) 指定位置插入元素
                            obj.splice(n,1l) 指定位置插入元素
a=[11,22,33,44,55,66]
(6) [11, 22, 33, 44, 55, 66]
a.splice(1,2) //两个数字 删除对应的索引
(2) [22, 33] //删除 索引为1和2的元素
a
(4) [11, 44, 55, 66]
a.splice(1,1)
[44]
a
(3) [11, 55, 66]
a.splice(0,1,2)
[11]
a
(3) [2, 55, 66]
var a=['a','b','c','d','e']
undefined
a.splice(0,2,2,4) //多余两个数字的时候 就有了别的含义 从某个位置开始,删除几个元素,替换为后边的元素
(2) ["a", "b"]//从索引为0的元素开始,向后删除2个元素,替换为2,4
a
(5) [2, 4, "c", "d", "e"]

6.push和pop

push添加元素到数组末尾 和concat一样呀 感觉

pop删除数组里的元素

x.push(value, ...)  压栈
x.pop()             弹栈  
var a=['a','b','c','d','e']
undefined
a.push(44,55)
7
a
(7) ["a", "b", "c", "d", "e", 44, 55]
a.pop(55)
55

7.shift和unshift

unshift是将value值插入到数组x的开始

shift是将数组x的第一个元素删除


var a=['a','b','c','d','e']
a.shift() //删除a数组的第一个元素
"a"
a
(4) ["b", "c", "d", "e"]
a.shift('c')
"b"
a
(3) ["c", "d", "e"]
a.unshift('a') //插入一个元素到数组的开头 开头
4
a
(4) ["a", "c", "d", "e"]
 

 5. 字典

//和Python用法一样
a={'k1':'V1','K2':'V2'}
{k1: "V1", K2: "V2"}
a['k1']
"V1"

6.null

老师说涉及对象呢,涉及对象无小事,要放在以后讲呢

7.undefind

//当一个变量只声明未赋值 或者一个函数没有返回值的时候  才是undefind
var a 
console.log(a);

来举例走起吧

<script>
        var a
        console.log(a)
        console.log(typeof a) // js中的查看类型是typeof 哦 python是type哦  眼瞎的别混了哦
    </script>

运算符

算术运算符:
    +   -    *    /     %       ++        --   //i++  i+=1  i=i+1 是一样的 自加

比较运算符:
    >   >=   <    <=    !=    ==    ===   !==  //====全等于 数值和类型都一样

逻辑运算符:
     &&   ||   !

赋值运算符:
    =  +=   -=  *=   /=

字符串运算符:
    +  连接,两边操作数有一个或两个是字符串就做连接运算

 

流程控制

if语句

if-else语句结构

if (表达式){
   语句1;
   ......
   } else{
   语句2;
   .....
   }

 

    if (1>2){
        console.log('true');
    }
    else{
        console.log('false');
}

 

 

 

if- else if - else语句结构

 

if (表达式1) {
    语句1;
}else if (表达式2){
    语句2;
}else if (表达式3){
    语句3;
} else{
    语句4;
}

 

var score=window.prompt('分数:'); //弹框输入数字
if (score > 90){
    console.log('厉害了');
}
else if (score > 80){
    console.log('可以哦');
}
else {
    console.log('是不是傻')
}

for循环

在js中有两种for循环

结构分别是

 for(初始表达式;条件表达式;自增或自减) //就用这种方式  习惯用这种方式在js里
    {
            执行语句
            ……
    }
for( 变量 in 数组或对象)
    {
        执行语句
        ……
    }
//第一种 循环时,循环的元素是索引 字典拿到的key
var a=[11,22,33,44,55,66];
for (var i=0;i<a.length;i++){
console.log(i,a[i])
}

 

//第二种 循环时,
for(var i=0;i<10;i=i+1){
}
for(var i=0,i<10;i++){
}
//循环数组
a=[11,22,33,44,55]
for(var i=0;i<a.length;i++){

}

//这种循环不支持字典//

 while循环

while (条件){
    语句1;
    ...
}
  i=0;
    while (i<3){
        console.log(i);
        i++;
    }

 switch-case结构

switch基本格式
switch (表达式) {
    case 值1:语句1;break;
    case 值2:语句2;break;
    case 值3:语句3;break;
    default:语句4;
}
var score=window.prompt('分数');
console.log(typeof(score));

switch (score){
    case "90":console.log('厉害了');break; //这里的数字一定要加引号 ,因为输入的是字符串不然没法比较呢
    case "80":console.log('可以哦');break;
    case "70":console.log('还行吧');break;
    default:console.log('没戏啦');break;

}

异常处理

try {
    //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
    //e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
     //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

js的对象

在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的。

//是因为把一些数据类型和方法当成了对象 所以叫基于对象实现的吗
<script language="javascript"> var aa=Number.MAX_VALUE; //利用数字对象获取可表示最大数 var bb=new String("hello JavaScript"); //创建字符串对象 var cc=new Date(); //创建日期对象 var dd=new Array("星期一","星期二","星期三","星期四"); //数组对象 </script>

Date对象

创建date对象


//方法1:不指定参数
var nowd1=new Date();
alert(nowd1.toLocaleString( ));
//方法2:参数为日期字符串
var nowd2=new Date("2004/3/20 11:12");
alert(nowd2.toLocaleString( ));
var nowd3=new Date("04/03/20 11:12");
alert(nowd3.toLocaleString( ));
//方法3:参数为毫秒数
var nowd3=new Date(5000);
alert(nowd3.toLocaleString( ));
alert(nowd3.toUTCString());

//方法4:参数为年月日小时分钟秒毫秒
var nowd4=new Date(2004,2,20,11,12,0,300);
alert(nowd4.toLocaleString( ));//毫秒并不直接显示

Date对象 获取时间和日期

获取日期和时间
getDate()                 获取日
getDay ()                 获取星期
getMonth ()               获取月(0-11)
getFullYear ()            获取完整年份
getYear ()                获取年
getHours ()               获取小时
getMinutes ()             获取分钟
getSeconds ()             获取秒
getMilliseconds ()        获取毫秒
getTime ()                返回累计毫秒数(从1970/1/1午夜)
function getCurrentDate(){
        //1. 创建Date对象
        var date = new Date(); //没有填入任何参数那么就是当前时间
        //2. 获得当前年份
        var year = date.getFullYear();
        //3. 获得当前月份 js中月份是从0到11.
        var month = date.getMonth()+1;
        //4. 获得当前日
        var day = date.getDate();
        //5. 获得当前小时
        var hour = date.getHours();
        //6. 获得当前分钟
        var min = date.getMinutes();
        //7. 获得当前秒
        var sec = date.getSeconds();
        //8. 获得当前星期
        var week = date.getDay(); //没有getWeek
        // 2014年06月18日 15:40:30 星期三
        return year+"年"+changeNum(month)+"月"+day+"日 "+hour+":"+min+":"+sec+" "+parseWeek(week);
    }

alert(getCurrentDate());

//解决 自动补齐成两位数字的方法
    function changeNum(num){
    if(num < 10){
        return "0"+num;
    }else{
        return num;
    }

}
//将数字 0~6 转换成 星期日到星期六
    function parseWeek(week){
    var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
    //             0      1      2      3 .............
    return arr[week];
}
练习

设置日期和时间

//设置日期和时间
//setDate(day_of_month)       设置日
//setMonth (month)                 设置月
//setFullYear (year)               设置年
//setHours (hour)         设置小时
//setMinutes (minute)     设置分钟
//setSeconds (second)     设置秒
//setMillliseconds (ms)       设置毫秒(0-999)
//setTime (allms)     设置累计毫秒(从1970/1/1午夜)
    
var x=new Date();
x.setFullYear (1997);    //设置年1997
x.setMonth(7);        //设置月7
x.setDate(1);        //设置日1
x.setHours(5);        //设置小时5
x.setMinutes(12);    //设置分钟12
x.setSeconds(54);    //设置秒54
x.setMilliseconds(230);        //设置毫秒230
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日5点12分54秒

x.setTime(870409430000); //设置累计毫秒数
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日12点23分50秒

日期和时间的转换

日期和时间的转换:

getTimezoneOffset():8个时区×15度×4分/度=480;
返回本地时间与GMT的时间差,以分钟为单位
toUTCString()
返回国际标准时间字符串
toLocalString()
返回本地格式时间字符串
Date.parse(x)
返回累计毫秒数(从1970/1/1午夜到本地时间)
Date.UTC(x)
返回累计毫秒数(从1970/1/1午夜到国际时间)
View Code

Math对象

复制代码

//该对象中的属性方法 和数学有关.
   

abs(x)    返回数的绝对值。
exp(x)    返回 e 的指数。
floor(x)对数进行下舍入。
log(x)    返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)    返回数的正弦。
sqrt(x)    返回数的平方根。
tan(x)    返回角的正切。

//方法练习:
        //alert(Math.random()); // 获得随机数 0~1 不包括1.
        //alert(Math.round(1.5)); // 四舍五入
        //练习:获取1-100的随机整数,包括1和100
             //var num=Math.random();
             //num=num*10;
             //num=Math.round(num);
             //alert(num)
        //============max  min=========================
        /* alert(Math.max(1,2));// 2
        alert(Math.min(1,2));// 1 */
        //-------------pow--------------------------------
        alert(Math.pow(2,4));// pow 计算参数1 的参数2 次方.

function 函数对象 重点

 

function 函数名 (参数){
   函数体;
    return 返回值;
}

 

函数名的定义规则与标识符一致,大小写是敏感的
返回值必须使用return

可以使用变量、常量或表达式作为函数调用的参数
函数由关键字function定义

注意:js的函数加载执行与python不同,它是整体加载完才会执行,所以执行函数放在函数声明上面或下面都可以:

函数的调用

function func1(a,b){

    alert(a+b);
}

    func1(1,2);  //3
    func1(1,2,3);//3
    func1(1);    //NaN
    func1();     //NaN

    //只要函数名写对即可,参数怎么填都不报错.

-------------------面试题-----------
 function a(a,b){
    alert(a+b);
}

   var a=1;
   var b=2;
   a(a,b)

函数的内置对象argments

function add(a,b){

        console.log(a+b);//3
        console.log(arguments.length);//2
        console.log(arguments);//[1,2]

    }
    add(1,2)

    ------------------arguments的用处1 ------------------
    function nxAdd(){
        var result=0;
        for (var num in arguments){
            result+=arguments[num]
        }
        alert(result)

    }

    nxAdd(1,2,3,4,5)

//     ------------------arguments的用处2 ------------------

    function f(a,b,c){
        if (arguments.length!=3){
            throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments")
        }
        else {
            alert("success!")
        }
    }

    f(1,2,3,4,5)

匿名函数

(匿名函数)(直接调用)

 

 匿名函数的应用
    (function(){
        alert("tony");
    } )()

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

 

BOM对象

 

window对象

所有浏览器都支持 window 对象。
概念上讲.一个html文档对应一个window对象.
功能上讲: 控制浏览器窗口的.
使用上讲: window对象不需要创建对象,直接使用即可.

windows对象方法
alert('填写需要弹出的消息')  // 显示带有消息和确定按钮的弹窗
confirm('填写弹窗的消息') //显示带有消息和确定,取消按钮的弹窗
prompt('请输入用户名:') //显示提示用户输入的输入框 

open() 打开一个新的浏览器窗口或查找一个已命名的窗口。 close() 关闭浏览器窗口。 setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。 clearInterval() 取消由 setInterval() 设置的 timeout。 setTimeout() 在指定的毫秒数后调用函数或计算表达式。 clearTimeout() 取消由 setTimeout() 方法设置的 timeout。 scrollTo() 把内容滚动到指定的坐标。

方法使用

//----------alert confirm prompt----------------------------
    //alert('aaa');
    
    /* var result = confirm("您确定要删除吗?");
    alert(result); */

    //prompt 参数1 : 提示信息.   参数2:输入框的默认值. 返回值是用户输入的内容.

    // var result = prompt("请输入一个数字!","haha");
    // alert(result);


    方法讲解:    
        //open方法 打开和一个新的窗口 并 进入指定网址.参数1 : 网址.
        //调用方式1
            //open("http://www.baidu.com");
        //参数1 什么都不填 就是打开一个新窗口.  参数2.填入新窗口的名字(一般可以不填). 参数3: 新打开窗口的参数.
            open('','','width=200,resizable=no,height=100'); // 新打开一个宽为200 高为100的窗口
        //close方法  将当前文档窗口关闭.
            //close();

定时器的创建和清除

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

语法:<br>     setInterval(code,millisec)
其中,code为要调用的函数或要执行的代码串。millisec周期性执行或调用 code 之间的时间间隔,以毫秒计。
<input type="text" id="id1" onclick="begin()">
<button onclick="end()">停止</button>
<script>
function showtime() {
    var nowd2=new Date().toLocaleString(); //显示当前的时间
    var temp=document.getElementById('id1');
    temp.value=nowd2;

}
showtime();

var ID;
function begin() {
    if (ID==undefined){
        showtime();
        ID=setInterval(showtime,1000);
    }
}

function end() {
    clearInterval(ID);
    ID=undefined;
}
实时显示时间

DOM对象

什么是HTML  DOM

  •     HTML  Document Object Model(文档对象模型)
  •     HTML DOM 定义了访问和操作HTML文档的标准方法
  •     HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)

DOM

DOM的节点类型

 

 节点关系

节点查找

导航节点属性

'''

parentElement           // 父节点标签元素

children                // 所有子标签

firstElementChild       // 第一个子标签元素

lastElementChild        // 最后一个子标签元素

nextElementtSibling     // 下一个兄弟标签元素

previousElementSibling  // 上一个兄弟标签元素

'''

 

posted @ 2017-10-09 21:31  lazyball  阅读(623)  评论(0编辑  收藏  举报