JavaScript学习

JavaScript

1、简介

JavaScript 是脚本语言

ECMAScript 可以理解为JavaScript的一个标准

2、入门

2.1、引入

内部标签
<script>
	//....    
</script>

外部引入
<script src="...">   
</script>

script标签必须成对出现

2.2、基本语法

与Java语法相同

JavaScript严格区分大小写

定义数据类型不区分浮点数和整数

在浏览器控制台打印变量console.log()

3、数据类型

控制台输出NaN(not a number)

控制台输出Infinity(无穷大)

== 等于(类型不一样,数值一样,输出true)

=== 绝对等于(类型一样,数值一样,输出true)

3.1、变量

let i = 1;
//局部变量建议使用let定义

3.2、严格检查模式

'use strict'
//预防Javascript的随意性产生一些问题

3.3、数组

//数组中数值类型可以不同
var Arrary = [1,2,3,4,'hello',null,true];


var arr = [1,3,5,2,6,'a','b']
//截取Arrary的一部分,返回一个新的数组
slice()
arr.slice()

//在数组尾部压入元素
push()

//在数组尾部弹出元素
pop()

//在数组头部压入元素
unshift()

//在数组尾部弹出元素
shift()

//数组排序
sort()

//元素反转
reverse()

//拼接两数组
arr = [1,2,3]
arr.concat(["a","b"])
arr = [1,2,3,"a","b"]
//concat()并没有修改数组,只会返回一个新的数组

//连接数组
arr=["c","b","a"]
arr.join('-')
"c-b-a"

3.4、字符串

//多行字符串
var msg =
    `hello
	world`;

//大小写转化
*.toUpperCase()

//获取下标
*.indexOf('');

//截取指定字符串
*.substring(1,3)//[ , )

3.5、对象

JavaScript中的所有的键都是字符串,值是任意对象

若干个键值对

var 对象名 ={
	属性名:属性值,
    属性名:属性值,
    属性名:属性值
}


//动态的删减属性
delete 对象名.属性名

//判断属性值是否在这个对象中
'属性名' in 对象名

//判断一个属性是否是这个对象自身拥有的
对象名.hasOwnPreperty('toString')

3.4、流程控制

for…in循环

//for(var index in object){}

age = [12,3,5,54,6,21,132]
for(var num in age){
    console.log(age[num])//取出下标
}

for…of循环

age = [12,3,5,54,6,21,132]
for(var num of age){
    console.log(num)
}

forEach循环

var age = [1,23,151,231,51,5]age.forEach(function(value){    console.log(value)})

3.5、Map和Set

ES6的新特性

Set:无序不重复的集合

var set = new set([3,1,1,1,1])//set 可以去重set.add(2);set.delete(1);set.has();//判断是否包元素

Map:

var map = new Map(['tom',90],['jeck',90],['black',80]);var name = map.get('tom');map.set('admin',12345);//添加map.delete('tom');

3.6、iterator

ES 标准虽然没有直接支持 Iterator API,但它通过了内建迭代器的方案。就是使用 Symbol.iterator,这是 ES6 引入的。我们可以用他来遍历String,Array,Map,Set。

var arr = ['a', 'b', 'c', 'd', 'e'];var eArr = arr[Symbol.iterator]();console.log(eArr.next().value); // aconsole.log(eArr.next().value); // bconsole.log(eArr.next().value); // cconsole.log(eArr.next().value); // dconsole.log(eArr.next().value); // e// Mapconst map1 = new Map();map1.set('0', 'foo');map1.set(1, 'bar');const iterator1 = map1[Symbol.iterator]();for (let item of iterator1) {  console.log(item);}

4、函数及面向对象

4.1、函数的定义

方式一

 function abs(x){     if(x<0){         return -x;     }else{         return x;     } }//一旦执行到return代表函数结束//若传入多个参数,只返回第一个的值//若不传入参数,返回NaN,此时需要手动抛出异常 function abs(x){     if(typeof x !== 'number'){         throw 'Not a Number';     }     if(x<0){         return -x;     }else{         return x;     } }

利用arguments可以拿到传递进来的所有参数,是一个数组

function a(x){    for(var i = 0;i<arguments.length;i++){        console.log(atguments[i]);    }}a(5,6,7,8);5 6 7 8

rest可以拿到定义之外的所有参数,ES6新特性

function a(a,b,...rest){    console.log(a);    console.log(b);    console.log(rest);}a(5,6,7,8)5 6 [7,8]

方式二

var abs = function(x){    if(x<0){         return -x;      }else{         return x;     }}//匿名函数

4.2、变量的作用域

内部函数可以访问外部函数的成员,反之则不行

function outer(){    var x = 1;        function inner(){        var y = x + 1;    }        var z = y + 1;//Uncaught ReferenceError : y is not defined}

内部函数变量和外部函数变量重名,从自身函数开始查找

function outer(){    var x = 1;        function inner(){        var x = 'A';        console.log(x);    }    console.log(x);    inner();}

全局对象 window

var x = 'w';alert(x);alert(window.x);window.alert(x);

javascript 实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,若在全局作用域也没有找到,报错RefrenceErroe

规范

全局的变量都定义在window下

问题:若不同的js文件,使用了相同的全局变量便会产生冲突

//定义自己的唯一全局变量var sunshine = {};sunshine.name = 'sun';sunshine.add = function (a,b){    return a+b;}

局部作用域 let

function f(){    for(var i = 0;i<100;i++){        console.log(i);    }    console.log(i+1);//输出101 证明i还可以使用}

ES6 使用let关键字,解决局部作用域冲突的问题

function f(){    for(let i = 0;i<100;i++){        console.log(i);    }    console.log(i+1);//Uncaught ReferenceError : y is not defined}

4.3、常量

在早些年,人们以大写字母规定常量

在ES6后,出现关键字const 来定义常量

4.4、方法

将函数放入对象中

var sunshine = {    name:'sunshine',    birth:2020,    age:function(){        var now = new Date().getFullYear();        return now - this.birth;    }}//属性sunshine.name//方法sunshine.age()

this 代表使用它的对象

function getAge(){        var now = new Date().getFullYear();        return now - this.birth;}var sunshine = {    name:'sunshine',    birth:2020,    age:getAge    }}//sunshine.age() 20//getAge() NaN this此时指向window对象

apply

在js中可以控制this的指向

getAge.apply(sunshine,[]);//this指向sunshine对象,参数为空

5、常用对象

5.1、内部对象

标准对象

typeof 123"number"typeof '123'"string"typeof true"boolean"typeof NaN"number"typeof []"object"typeof {}"object"typeof Math.abs"function"typeof undefined"undefined"

5.2、Date

var now = new Date();now.getFullYear();//年now.getMouth();//月 0-11代表月now.getDate();//日now.getDay();//星期now.getHours();//时now.getMinutes();//分now.getSeconds();//秒now.getTime();//时间戳 1970.1.1//转化now.toLocaleString();now.toGMTString();

5.3、JSON

早期所有的数据传输习惯使用XML文件

  • JSON是一个轻量级的数据交换格式,提升了网络传输效率

在JavaScript一切皆为对象,任何支持js类型的都可以使用JSON来表示

格式:

  • 对象用{}
  • 数组都用 []
  • 所有的键值对都用 key:value
var user = {    name:"sunshine",    age:3,    sex:'男'}//对象转化为JSON字符串JSON.stringify(user)//JSON字符串解析为对象JSON.parse();

6、面向对象编程

6.1、原型对象

var sunshine =  {    name:"sunshine",    age:18,    run:function(){        console.log(this.name + "run...")    }}var sun = {    name:"sun"}//sun 的原型 指向 sunshine(sun 继承 sunshine)sun.__proto__ = student;

**原型链:**每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。

img

6.2、class对象

class 继承 (此关键字是ES6之后引入)

function sunshine(name){    this.name = name;}//给sunshine新增一个方法sunshine.prototype.sun = function(){    alert('sun')}//ES6之后class sunshine{    constructor(name){        this.name = name;    }        sun(){        alert('sun');    }}var s = new sunshine("sunshine");//继承class sunshien2 extends sunshine{    constructor(name,grade){        super(name);        this.grade = grade;    }    myGrade(){        alert('sunshine2');    }}

class 对象本质依旧是原型对象

7、操作Bom对象

BOM:浏览器对象模型

window (重要)

window 代表 浏览器窗口

window.alert()window.innnerHeightwindow.innerWidthwindow.outerHeightwindow.outerWidth

Navigator

navigator对象,封装了浏览器的信息

screen

screen 代表屏幕

location (重要)

location 代表当前页面的URL信息

host:"www.baidu.com"href:"https://www.baidu.com/"protocol:"https:"reload:f reload() //刷新网页//设置新的地址location.assign('');

document

decument 代表当前页面,DOM文档树

//获取网页titledecument.title

decument可以具体的获取文档树节点

<dl id="sun">	<dt>Java</dt>	<dt>Javase</dt>	<dt>Javaee</dt></dl><script>	var dl = document.getElementById('sun');</script>

decument可以获取cookie

history

history代表浏览器的历史记录

//后退history.back()//前进history.forward()

8、操作Dom元素

DOM:文档对象模型

浏览器网页就是一个DOM树形结构

//对应css选择器<div id="father">    <h1>标题</h1>    <p id="p1"></p>    <p> classs="92"</p></div><script>    var h1 = document.getElementByTagName('h1');	var p1 = document.getElementById('p1');    var p2 = document.getElementByClassName('p1');    var father = document.getElementById('father');        var childer = father.childer;//获取父节点下的所有子节点    //father.firsChild</script>

这里是原生代码,之后会使用jQuery()

8.1、更新节点

//对应css选择器<div id="id1"></div><script>	var id = document.getElementById('id1');</script>

操作文本

  • id.innerText = ’ 456’ 修改文本的值
  • id.innerHTML = ‘’ 可以解析HTML文本标签

操作js

id.style.color = 'red'id.style.fontSize = '200px'

8.2、删除节点

只能通过找到父节点,来删除子节点

<div id="father">    <h1>标题</h1>    <p id="p1"></p>    <p> classs="92"</p></div><script>   	var p1 = document.getElementById('p1');    var father = p1.parentElement;    father.removeChild(p1);            //删除是一个动态的过程,下标会随之变化    father.removeChild(father.children[0])</script>

8.3、插入节点

<head>    <tytle></tytle></head><body>    <p id="js">JavaScript</p>    <div id="list">        <p id="me">JavaME</p>        <p id="se">JavaSE</p>        <p id="ee">JavaEE</p>    </div></body><script>	var js = document.getElementById('js');    var list = document.getElementById('list');    //通过JS创建一个新的节点    var newP = document.createElement('p');    newP.id = 'newP';    new.innerText = 'hello,sunshine';    //通过 *.appendChild() 追加子节点    list.appendChild(newP);        //创建一个标签节点    var myScript = document.createElement('script');    myScript = setAttribute('type','text/javascript');        //创建一个Style标签    var myStyle = document.createElement('style');    myStyle.setAttribute('type','text/css')    myStyle.innerHTML = 'body{background-color:red}';    //将myStyle加入    document.getElementByTagName('head')[0].appendChild(myStyle);</script>

将新节点插入到目标节点之前 insertBefore(newNode,targetNode)

9、操作表单

<form action="" method="post">    <p>        <span>用户名:</span><input type="text" id="username">    </p>    <p>        <span>性别:</span>        <input type="radio" name="sex" value="man" id="boy"><input type="radio" name="sex" value="women" id="girl"></p>        <input type="submit"></form><script>	var input = document.getElementById('username');    var boy = document.getElementById('boy');    var girl = document.getElementById('girl');    //得到输入框的值    input.value    //修改输入框的值    input.value = 123;    //获取单选框,多选框选中的值(查看返回结果是否为true)    boy.checked    </script>

9.1、提交表单

<form action="#" method="post">    <p>        <span>用户名:</span><input type="text" id="username" name="username">    </p>    <p>        <span>密码:</span><input type="password" id="password" name="password">    </p>        <!--点击绑订事件-->    <button type="button" onclick="f()">提交</button></form><script>	function f(){        var username = document.getElementById('username');        var password = document.getElementById('password');                //利用MD5对密码加密(需要导入工具类)        password.value = md5(password);            }    </script>

10、jQuery

需要引入在线的CDN或者自己下载包

公式:$(选择器).事件()

其中选择器为css的选择器

10.1、选择器

<script>	$('p').click()//标签选择器    $('#id').click()//id选择器    $('.class').click//class选择器    //属性选择器等和CSS相同(文档工具站)</script>

10.2、事件

<html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>    <style>        #divMove{            width: 500px;            height: 500px;            border: 1px solid red;        }    </style></head><body>mouse : <span id="mouseMove"></span><div id="divMove">    在这里移动鼠标</div><script>    //$(document).ready(function(){})    $(function () {        $('#divMove').mousemove(function (e) {            $('#mouseMove').text("x:"+e.pageX+'y:'+e.pageY);        })    });</script></body></html>

10.3、操作DOM

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul id="test-ul">
    <li class="js">JavaScript</li>
    <li name="python">Python</li>
</ul>

<script>
    $('#test-ul li[name=python]').test();
    $('#test-ul').html();
</script>
</body>
</html>

css的操作

$('#test-ul li[name=python]').css("color","red");

元素的显示和隐藏(本质display:none)

    $('#test-ul li[name=python]').show();
    $('#test-ul li[name=python]').hide();
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值