JavaScript学习笔记

一、JavaScript和Java一样严格区分大小写

JavaScript最主要的是做网络通信、交互、操作DOM

使用 window.alert() 弹出警告框。
使用 document.write() 方法将内容写到 HTML 文档中。
使用 innerHTML 写入到 HTML 元素。
使用 console.log() 写入到浏览器的控制台。

二、JavaScript在浏览器控制台打印变量

  1. console.log(变量)
  2. JavaScript的变量都是以var定义的,其他的类似Java

三、数据类型–字符串、布尔值、逻辑运算、数组、对象、流程控制、Map和Set、iterator

**ES6新特性–严格检查模式use strict预防JavaScript的随意性出问题
**

  1. JavaScript不区分整数和小数
    NaN–not a number
    Infinity–表示无限大

  2. 字符串
    “abc” ‘abc’

    2.1、正常的字符串我们使用单引号、双引号来包裹
    2.2、注意转义字符 \
    2.3、多行字符串` `` `
    
`sdsdsd
sfdsafd
张山
是的是的
发达发达地方
`
	2.4、模板字符串
let msg=`你好,{$name}`
	2.5、字符串长度 length
	2.6、字符串的可变性--不可变
	2.7、大小写转换方法
		toUpperCase() 转大写
		toLowerCase() 转小写
	2.8、获取指定字符串的下标 indexOf
	2.9、截取指定字符串substring
		[) 截取前面不截取后面
		substring(1) 从第一个截取到最后一个
		substring(1,3) 从第一个截取到第三个
  1. 布尔值 true flase

  2. 逻辑运算
    &&与运算
    ||或运算
    !取反运算

  3. 比较运算
    = 赋值
    !=不等于
    ===绝对等于(推荐使用这个)
    只能通过isNaN来判断一个数是否是NaN
    浮点数问题:精度的损失,尽量避免使用浮点数来计算

  4. null和undefined
    null 空
    undefined 未定义

  5. 数组

    7.1、JavaScript中数组不需要是相同的数据类型,数组(array)可以包含任意的数据类型
    
var s1=["掌声"5555,sdsds,null,true]
	7.2、数组长度length
	7.3、IndexOf(),通过元素获取下标索引
	7.4、slice()截取数组的一部分,返回一个新的数组,类似于String中的subString
	7.5、push()往数组尾部压入一个元素,pop()弹出数组尾部的元素
	7.6、unshift()压入到头部,shift()弹出头部一个元素
	7.7、排序sort()
	7.8、元素反转reverse()
	7.9、concat()拼接数组,返回一个新数组
	7.10、连接符join,打印拼接数组的特定连接符
	7.11、多维数组
var arr[1][2]
  1. 对象–若干个键值对
    数组是中括号[],对象是大括号{}
var 对象名={
		属性名1:属性值1,
		属性名2:属性值2,
		属性名3:属性值3
		}
var person={
		name: “sss”,
		age:12,
		ss:[s,1,2,34,,43]
	8.1、对象赋值
	8.2、使用一个不存在的对象,不会报错
	8.3、动态的删减属性,通过delete
delete.person.name
	8.4、动态的添加,直接给新的属性添加值即可
person.name="lucy"
	8.5、判断属性是否在这个对象中
'name' in person		
	8.6、判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
  1. 流程控制

     9.1、if循环大致同java
     9.2、while循环for循环都大致同Java
     9.3、数组循环forEach()
     9.4、for...in
    
  2. map和set ES6新特性

    10.1、map
    
var map=new Map([['tom',100],['lucy',100],['zhang',100]])
		var name=map.get('tom')
		map.set('admin',12212)
		map.delete("admin")
	10.2、set:无序不重复的集合
var set=new Set([3,2,2,2,2])  set去重
		set.add(2)
		set.delete(2)
  1. iterator来遍历和迭代Map、Set集合
var arr=[2,1,2,1]
	11.1、遍历下标
for(var i in arr){
		console.log(i) //打印出来的是下标	
		}
    11.2、for..of迭代遍历,ES6新特性
遍历数组、map、set集合
		for(var i of arr){
		console.log(i) //打印出来的是具体的值	
		}

四、函数

  1. 定义函数–两种方式

    1.1、方式一(后端程序员的偏爱)
    
function as(x){
if(x>=0){
return x;
}
else {
return x;
}
}
	1.2、方式二(前端程序员的偏爱)
var as=function(x){ 
//其中function(x){...}叫做匿名函数				
if(x>=0){
return x;
}
else {
return x;
}
}
	1.3调用函数
as(10) 
as(10)
 	1.4、调用函数时的参数问题,JavaScript中可以传任意个参数,也可以不传参数
 			这就需要我们自己来手动处理空参问题了
var as=function(x){ 
if(typeof x!='number'){
throw 'not a number';
}
//其中function(x){...}叫做匿名函数				
if(x>=0){
return x;
}
else {
return x;
}
}
  1. arguments是一个js免费赠送的关键字–代表传递进来的所有参数是一个数组!
var as=function(x){ 
console.log("x=>"+x);
for(var i=0;i<argument.length;i++){
console.log(argument[i]);
}
//其中function(x){...}叫做匿名函数				
if(x>=0){
return x;
}
else {
return x;
}
}
  1. rest函数ES6新特性,获取已经定义的参数之外的所有参数…rest
function as(a,b,...rest){
            console.log("a=>"+a);
            console.log("b=>"+b);
            console.log("rest=>"+rest);
        }
  1. 变量的作用域

     4.1、var局部变量
     4.2、let全局变量
     4.3、变量的由内向外查找原则,变量重名时,内部函数会先用自己的变量。
     4.4、养成规范,变量先定义再使用。alert也是一个windows变量
    
  2. 方法–方法就是把函数放对象里,对象只有两个东西–属性和方法。

var s1={
    name:"里斯",
    sex:0,
    birth:1998,
    age:function getage(){
        var now=new Date().getFullYear();
        return now-this.birth;
    }
};
console.log(s1.age());
	拆开来写如下
function getage(){ //函数
    var now=new Date().getFullYear();
    return now-this.birth;
};
var s1={//对象
    name:"里斯",
    sex:0,
    birth:1998,
    age:getage //这里是方法
};
console.log(s1.age());//调用

在js中可以控制this的指向–apply

function getage(){
    var now=new Date().getFullYear();
    return now-this.birth;
};
var s1={
    name:"里斯",
    sex:0,
    birth:1998,
    age:getage
};
console.log(s1.age());
console.log(getage.apply(s1,[]));

五、内部对象–Date、json

  1. Date对象–和Java差不多直接new出来

    常用的一些
    
 var now=new Date();
    now.getFullYear();//年
    now.getMonth();//月 0~11,用的时候注意
    now.getDate();//日
    now.getDay();//星期几
    now.getHours();//时
    now.getMinutes();//分
    now.getSeconds();//秒
    now.getTime();//时间戳 全球统一
    new Date(now.getTime());//时间戳转为时间
    now.toLocaleString()//当前时间
  1. JSON轻量级的数据交换格式

在JavaScript中万物皆对象,任何js支持的类型都可以用json来表示

json的格式
		对象都用{}
		数组都用[]
		所有的键值对都是用key:value

json和对象的相互转换

var test1={
        name:"tome",
        sex:0,
        sge:20
   };
    var  test2=JSON.stringify(test1);//将对象转化为json字符串
    console.log(test2);
    var  test3=JSON.parse(test2); //将json字符串转化为对象
    console.log(test3);
json对象和js对象的区别
		var json={"name":"tome","sex":0,"sge":20}
		var js={ name: "tome", sex: 0, sge: 20 }

Ajax
原生的写法:xhr异步请求
JQuery封装好的方法:
axios请求:

六、面向对象编程

类:模板
对象:具体的实例

  1. 面向对象原型继承
 var user={
         name:"小黑",
         age:20,
         run:function () {
             console.log("跑起来了");
         }
     };
    var user1={
        name: "小米"
    };
    //这个是关键__proto__,user1继承user
    user1.__proto__=user;
  1. 面向对象class继承–class关键字,ES6引入
 class student{
        constructor(name) {
        this.name=name;
        }
        hello(){
            alert("hello");
        }
    }
    class lucy extends student{
        constructor(name,grade) {
            super(name);
            this.grade=grade;
        }
        mygrade(){
            alert("lucy");
        }
    }
    var s1=new student("s1");
    var s2=new lucy("s2",50);

原型链(类比继承)–proto,在JavaScript中每个每个函数都有一个prototype属性,这个属性指向函数的原型对象

  1. 操作BOM对象(BOM–浏览器对象模型) (重要部分)

     3.1、**Windows代表浏览器窗口,常用的有获取浏览器的内外高度、宽度以及弹窗。**(重要)
    
	//获取浏览器内部高宽度    
	window.innerHeight
    window.innerWidth
    //获取浏览器外部高宽度    
    window.outerHeight
    window.outerWidth
	3.2、Navigate封装了浏览器的信息。常用的有获取浏览器版本、内核等信息。
	**大多数不会使用navigator,因为会被人为的修改**
    navigator.appName//浏览器名称
    navigator.appVersion//浏览器版本
    navigator.appCodeName//浏览器内部代码
    navigator.userAgent//
    navigator.platform//
3.3、screen代表屏幕尺寸
3.4、location代表当前页面的URL信息(重要)
		location当前页面URL的一些信息
host:主机
href:当前指向的位置
protocol:协议
reload:reload()刷新网页
assign:设置新的地址
3.5、document代表当前页面,HTML,DOM文档树。
3.5.1、可以获取具体的文档树节点,删除节点,实现动态的修改网页。
<dl id="java">
    <dt>javase</dt>
    <dt>javaee</dt>
    <dt>spring</dt>
</dl>
<script>
    var jiedian=document.getElementById('java');
    console.log(jiedian);
</script>
3.5.2、获取cookie
document.cookie
劫持cookie的原理
www.baidu.com
<script src="aa.js"></script>
恶意人员,获取你的cookie上传到他的服务器中。
服务器端设置:cookie:httpOnly

3.6、history前进forward和后退back

柒、操作DOM对象(DOM:文档对象模型)

注:

 浏览器网页就是一个DOM树形结构。
				更新:更新DOM节点
				遍历DOM节点:得到DOM节点
				删除:删除一个DOM节点
				添加:添加一个新的节点

要操作一个DOM节点,就必须要先获得这个DOM节点。
document:文档

<div id="d1">
    <h1 id="s1">sdsd</h1>
    <h2 class="s2">sddsd</h2>
</div>
<script>
    //对应css选择器
    var d1=document.getElementById('d1');
    var s1=document.getElementById('s1');
    var s2=document.getElementsByClassName('s2');
    //获取父节点下的所有子节点,
    var childrens=d1.children;
    //获取第一个节点
    d1.firstChild;
    //获取最后一个节点
    d1.lastChild;
    console.log(d1);
    console.log(s1);
    console.log(s2);
</script>

更新节点

<div id="d1">
    <h1 id="s1">sdsd</h1>
    <h2 class="s2">sddsd</h2>
    <h3>sdadsd</h3>
</div>
<script>
  
    //获取节点
    var s1=document.getElementById('s1');
    //操作文本
    s1.innerText="靓仔";
    //解析HTML文本标签
    s1.innerHTML=' <h3>sdadsd</h3>';
    //操作CSS
    s1.style.color='yellow';
    s1.style.fontSize='200px';
</script>

删除节点

	删除节点步骤:先获取父节点,再通过父节点删除自己。
<div id="d1">
    <h1 id="s1">sdsd</h1>
    <h2 class="s2">sddsd</h2>
    <h3>sdadsd</h3>
</div>
<script>

    //获取节点
    var s1=document.getElementById('s1');
    //获取父节点
    var father=s1.parentElement;
    //删除节点,父节点删除子节点
    father.removeChild(s1);
</script>

创建和插入节点

	1、创建一个新标签,实现插入
<div id="d1">
    <h1 id="s1">sdsd</h1>
    <h3 id="s3">sdadsd</h3>
</div>
<script>

    //获取节点
    var s1=document.getElementById('s1');
    //通过JavaScript创建一个新的节点
    var newP=document.createElement('p');//创建一个p标签
    newP.id="s2";//标签id值
    newP.innerText="哈哈哈哈";//标签内容
    s1.appendChild(newP);//新标签追加到节点是后面
    //第二种方式,推荐使用
    //获取节点
    var s3=document.getElementById('s3');
    var script=document.createElement('script');
    script.setAttribute('type','text/javascript');//
    s3.appendChild(script);//新标签追加到节点是后面
</script>
2、插入节点
<div id="d1">
    <h1 id="s1">节点</h1>
    <h3 id="s3">插入</h3>
</div>
<script>
    //获取节点
    var s1=document.getElementById('s1');
    var s3=document.getElementById('s3');
    var d1=document.getElementById('d1');
    //插入节点
    d1.insertBefore(s3,s1);
</script>
3、操作表单

获取的是一个对象:document.getElementById(“username”)
获取的是一个值:document.getElementById(“username”).value
且document.getElementById(“username”).value,取得是当前的值

document.forms	表示获取当前页面的所有表单
document.forms[0]	表示获取当前页面的第一个表单
document.forms[‘exportServlet’]	表示获取当前页面的name="exportServlet"的表单
document.forms[‘exportServlet’].username.value	获取表exportServlet,	name为exportServlet的值
document.forms[0].submit	表示提交第一个form表单	

绑定按钮事件onclick

<div>
        <form action="">
            username:<input type="text" id="username3" required ><br>
            password:<input type="password" id="password3" required><br>
            <input type="submit" value="提交" onclick="myform4()"><!--绑定事件,onclick被点击-->
            <input type="reset" value="重置">
        </form>
    </div>
<script>
    function myform4(){
        alert("绑定事件已触发")
    }
</script>

绑定表单提交事件,onsubmit绑定一个提交检测的函数:true,flase。将这个给结果返回给表单,使用onsubmit接受

 <div>
        <form action="#" onsubmit="return myform4()" method="get">
            username:<input type="text" id="username3" required name="username"><br>
            password:<input type="password" id="input-password3"  required><br>
                    <input type="hidden" id="md5-password" name="md5-password">
            <input type="submit" value="提交"><!--绑定事件,onclick被点击-->
            <input type="reset" value="重置">
        </form>
    </div>
<script>
    function myform4(){
        var username=document.getElementById('username3').value;
        var password=document.getElementById('input-password3').value;
        var md5password=document.getElementById('md5-password').value;
        console.log(password);
        password=md5(password);
        md5password=password;
        console.log(password);
        console.log(md5password);
        //return 决定是否会跳转
        return true;
    }
</script>

表单提交MD5加密

    <div>
        <form action="">
            username:<input type="text" id="username3" required ><br>
            password:<input type="password" id="password3" required><br>
            <input type="submit" value="提交" onclick="myform4()"><!--绑定事件,onclick被点击-->
            <input type="reset" value="重置">
        </form>
    </div>
<script>
    function myform4(){
        var username=document.getElementById('username3').value;
        var password=document.getElementById('password3').value;
        console.log(password);
        password=md5(password);
        console.log(password);

    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值