JavaScript学习 Day4~Day5

JavaScript学习 Day4~Day5

1、方法

let a ={
    name:"xiaoming",
    bitrh:2002,
    // 方法
    age:function () {	// 似乎和函数毫无差别
        let now = new Date().getFullYear();	// 获取当前年份
        return now - this.bitrh;
    }
}
// 属性
a.name
// 方法 要带括号
a.age()
function getAge() {
    let now = new Date().getFullYear();
    return now - this.bitrh;		// this 只会指向调用它的对象
}

let a ={
    name:"xiaoming",
    bitrh:2002,
    // 方法
    age:getAge		// 这里不要()
}
// 可以把方法放到上面写,用a.age调用会成功,不能直接调用

apply() 所有函数都有的一个函数

在 js 中控制 this 的指向

// 函数后不要()
getAge.apply(a,[]);   // (指向对象,参数) 参数是数组对象

2、内部对象

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

5.1 Date

let a = new Date();
console.log(a.getFullYear());    // 年
console.log(a.getMonth());       // 月
console.log(a.getDate());        // 日
console.log(a.getDay());         // 星期
console.log(a.getHours());      // 小时
console.log(a.getMinutes());    // 分钟
console.log(a.getSeconds());    // 秒
console.log(a.getTime());       // 时间戳
console.log(new Date(a.getTime()));     // 时间戳转时间

console.log(a.toLocaleString());
console.log(a.toGMTString());

在这里插入图片描述

2.2 JSON

JSON 是什么

早期,所有的数据传输都是用xml文件!

  • Json 是轻量级的数据交换格式
  • 简洁清晰的层次结构
  • 提升网络传输效率

格式:

  • 对象{}
  • 数组[]
  • 键值对 key : value

JSON 字符串 和 js 对象的转化

let a = {
  ha : "wu",
  xi : 10,
  wu : "wu"
}
console.log(a);

let b = JSON.stringify(a);
console.log(b);   // {"ha":"wu","xi":10,"wu":"wu"}

let c = JSON.parse('{"ha":"wu","xi":10,"wu":"wu"}');  // 里面""外面就不能用了"",得用'',反之亦然
console.log(c);

2.3 Ajax

  • 原生的js写法 xhr 异步请求
  • jQuey 封装好的方法 $(“#name”).ajax(“”)
  • axios 请求

3、 面向对象编程

3.2 继承

原型对象

let a = {
  name : "xiaohong",
  run : function () {
      console.log(this.name + " run...")
  }
};

let xiaoming = {
  name: "xiaoming"
};

xiaoming.__proto__ = a;   // 继承!
console.log(xiaoming);

let fly = {
  fly : function () {
    console.log(this.name + " fly...")
  }
}

xiaoming.__proto__ = fly;   // 还可以换一个继承
console.log(xiaoming);

class 继承 ES6

1.定义一个类

class a {
    constructor(name) {		// 构造方法
        this.name = name;
    }
    hello() {				// 甚至不要返回值类型
        alert("hello");
    }
}
let aa = new a("xiaomiung");	
aa.hello();

2.继承

class b extends a{...}	// 和java一样
bb
b {name: 'xiaohong', age: 12}
age: 12
name:"xiaohong"
[[Prototype]]: a

本质:查看对象原型

原型链

查看对象原型的时候就在控制台点↓

// 拿前面的bb举例
[[Prototype]]: a
// 然后这个点开还有一个Prototype
[[Prototype]]: Object
// 再点开
[[Prototype]]: Object

点到一堆乱七八糟的玩意里,这时候看到最下面没有那个Prototype了

但是随便点开一个,再顺着Prototype点点点

就又要回到了 [[Prototype]]: Object,形成了一个闭环

4、操作BOM对象(重点)

BOM:浏览器对象模型

window

window代表 浏览器窗口

// 内部的宽高
window.innerHeight
686
window.innerWidth
387
// 外部的宽高
window.outerHeight
831
window.outerWidth
782

(不建议使用)
Navigator 类

navigator 对象

封装了浏览器的信息

navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
navigator.platform
'Win32'

大多数不使用 navigator,因为会被人修改

不建议用这些属性来判断和编写

screen

屏幕尺寸

screen.height
864
screen.width
1536

location(重要)

当前页面URL信息

host: "www.baidu.com"			// 主机
href: "https://www.baidu.com/"
protocol: "https:"				// 协议
reload: ƒ reload()				// 刷新网页 
location.assign('https://www.bilibili.com/')	// 跳转

document

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

document.title
'哔哩哔哩 (゜-゜)つロ 干杯~-bilibili'
document.title = "哈哈"
'哈哈'

获取具体的文档树节点

<dl id = 'aa'>
  <dt>a</dt>
  <dd>b</dd>
  <dd>c</dd>
</dl>

<script>
  let a = document.getElementById("aa");
</script>

获取 cookie

document.cookie
''		

cookie 是用来登录网站之类的

服务器端可以设置 cookie : httpOnly(只读)

history(不建议使用)

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

5、操作BOM对象2(重点)

核心

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

  • 更新:更新Dom节点
  • 遍历Dom节点:得到Dom节点(上面document)
  • 删除…
  • 添加…

操作Dom节点,就要获得Dom节点

1.获得Dom节点

<div id = "ha">
    <h1>h1</h1>
    <p id = "id">p1</p>
    <p class="class">p2</p>
</div>

<script>
    let h1 = document.getElementsByTagName("h1");    // 标签
    let id = document.getElementById("id");    // id
    let c = document.getElementsByClassName("class");    // class
    let ha = document.getElementById("ha");

    let cl = ha.children;   // 获取所有子节点
    ha.firstChild;  // 第一个孩子
    ha.lastChild;   // 最后一个孩子

这是原生代码,之后尽量使用jQuery

2.更新节点

inner

id1.innerText = "haha"	
'haha'
id1.innerHTML = "<strong>xixi</strong>"		
'<strong>xixi<strong>
id1.style.color = "red"		// 属性使用字符串
'red'
id1.style.fontSize = "50px"
'50px'
id1.style.padding = "20px"
'20px'

注意:这两都是 = ,不是方法

3.删除节点

删除节点的步骤:先找父节点,再删除

f.removeChild()

let f = z.parentElement		 // 找父亲
f.removeChild(z)			// 不带引号

f.children

ha.children
HTMLCollection(3) [h1, p#id, p.class, id: p#id]
ha.children[0]	// 可以通过下标来找
<h1>h1</h1>
// 那就可以用下标删除
ha.removeChild(ha.children[0])
<h1>h1</h1>
ha.children[0]		// 但是这个时候删除了[0],[1]就变成了[0]了
<p id="id">p1</p>

所以要注意child是随时变化的

4.插入节点

inner在dom节点没东西的时候是插入,有的话就覆盖了

<body>
<p id = "JS">JS</p>
<div id = "div">
    <p id = "p1">p1</p>
    <p id = "p2">p2</p>
</div>

<script>
    let Js = document.getElementById("JS");
    let div = document.getElementById("div");
    let p1 = document.getElementById("p1");
    let p2 = document.getElementById("p1");
</script>
</body>

剪切或新建 .appendChild(JS)

JS
p1
p2
div.appendChild(JS)	// 剪切了已存在的节点
p1
p2
JS

创建新的标签

let new_p = document.createElement('p');        // 创建了一个新的p节点
new_p.id = "new_p";    		// 设置id
new_p.innerText = "new_p";  // 标签里的文本
div.append(new_p);      	// 插入

带有属性的标签 .setAttribute(‘’,‘’)

// 创建一个标签节点 刚才创建了一个p标签
let hei = document.createElement('script');
hei.setAttribute('type','text/javascript'); // 相当于type = 'text/javascript'
// 还可以设置("id","p12") --> id = "p12  相当于设置属性和属性值

div.appendChild(hei)
<div id="div">
    <p id="p1">p1</p>
    <p id="p2">p2</p>
    <p id="new_p">new_p</p>
    <script type="text/javascript"></script>	// 这样就添加了一个带有属性的标签
</div>

设置样式

let body = document.getElementsByTagName("body");   // 这时候body里是个数组 0:body
body[0].setAttribute('bgcolor','red');      
// 也可以获取head标签,在里面appendChild style标签,设置type = "text/css",再innerHTML 来更改样式
let head = document.getElementsByTagName("head");
let myStyle = document.createElement("style");
myStyle.innerHTML = "body{background-color:yellow}";	// 添加css语句
head[0].append(myStyle);
// 注意 getElementsByTagName 是数组
body
HTMLCollection [body]
    0: body
    length: 1
    [[Prototype]]: HTMLCollection

insertBefore

// insertBefore()
div.insertBefore(p2,p1);
// 在div(父节点)里,把p2放到p1前面

6、操作表单

form 、input

  • 文本框 text
  • 下拉框
  • 单选框 radio
  • 多选框 checkbox
  • 隐藏域 hidden
  • 密码框 password

6.1操作表单

text

<form>
    <p>
        <span>用户名:</span><input type="text" id ="username" value="admin">   
        <!--  可以通过设置value设置初始值  -->
    </p>
</form>
<script>
    let username = document.getElementById("username");
    username.value = "haha";	// 那就可以设置value来更改属性
</script>

radio

<p>
    <span>性别:</span>
    <input type="radio" name="sex" id = "man"><input type="radio" name="sex"></p>
<script>
    let sex = document.getElementsByName("sex");    // 可以去到 name = "sex" 的值
    // let man = document.getElementById("man");	也可以设置id,用id来选
    // 获取到的是一个数组
    sex
    NodeList(2) [input, input]
    0: input
    1: input
    length: 2
    // 不设置value,默认是'on',没啥用
    sex[0].value
	'on'
    // 更改是使用 sex[数].checked = true 改中谁选谁
</script>

6.2 提交表单

<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>
    <!--提交按钮,onclick 是绑定事件-->
    <button type="submit" onclick="a()">提交</button>	
    <!--但是如果type = "button"(普通按钮) 就会没有请求-->
</form>

<script>
    function a() {	// 绑定了a()函数
        let username = document.getElementById("username");
        let password = document.getElementById("password");

        console.log(username.value);
        console.log(password.value);

        password.value = "***"
    }
</script>

查看请求

在这里插入图片描述

点进去之后,选择载荷,里面有两个

  • 查询字符串参数,这个不知道来自哪
  • 表单数据,这个来自给input设置的name,不设置name就没有

提交2 onsubmit

<!--
onsubmit 提交后是否请求
里面写 return true/false
false 的话就没有请求 action 的跳转也没用了
-->
<form action="#" method="post" onsubmit="return a()">

    <p>
        <span>用户名:</span> <input type="text" id ="username" name="username">
    </p>
    <p>
        <span>密码:</span> <input type="password" id ="password" name="password">
    </p>
    <input type="hidden" id="md5pwd">		<!--用隐藏的hidden来接收-->
    <button type="submit">提交</button>	   <!--这里就可以不用设置onclick-->

</form>

<script>
    function a() {
        let username = document.getElementById("username");
        let password = document.getElementById("password");
        let md5psw = document.getElementById("md5pwd");     // pwd也会接受到这里来

        // md5psw.value = md5(md5psw.value);	用隐藏框接收的使用
        // MD5 用来加密 但是我还没下MD5工具包
        // password.value = md5(password.value);
        return true;	

    }
</script>
  • 44
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值