首页 > 编程语言 >JavaScript

JavaScript

时间:2023-07-13 12:12:43浏览次数:29  
标签:arr age JavaScript alert 数组 var document

引入JavaScript

1.内部标签

<script>            </script>

2.外部引用

<script src="引入JavaScript.js"></script>

浏览器控制台使用

1.alert(弹窗)

alert();

2.console.log(控制台打印)

console.log();

数据类型

1.等于和绝对等于

== 等于(类型不一样,值相等,判断为true)
=== 绝对等于(类型一样,值相等,才会被判断为true)

在JavaScript中多用绝对等于

须知:

1.NaN(not a number)与任何数据===都会得到false

2.判断是否为NaN可以使用isNaN( )方法

3.JavaScript不区分小数和整数

2.浮点数运算

console.log(1/3===(1-2/3));

判断为false

浮点数运算会存在精度损失的问题,导致判断出错,尽量避免浮点数运算

或者将两数相减判断是否小于一个很小的数

console.log(1/3-(1-2/3)<0.0000001);

3.严格检查模式

'use strict'

在JavaScript代码的第一行加上,用来避免JavaScript代码的随意性造成的问题

局部变量都用let来定义

6.字符串

6.1转义字符

image-20230603092136138

6.2多行字符串

var msg=`
nihao
niganma
你好`

Tab键上方的符号

6.3模板字符串

let b="world";
alert(`hello,${b}`);

调用已定义的字符串

6.4大小写转换方法

let a="hello";
a.toUpperCase();
a.toLowerCase();

6.5截取字符串(substring)

alert(b.substring(1,3));

截取下标为1到3的字符组成一个新的字符串,包头不包尾。包含下标为1不包含下标为3的字符

7.数组

7.0.数组定义

var arr=[1,2,3,"hello","world"]

java中的数组元素要为同一类型,而JavaScript的类型都是var,所以数组里面元素随便定义

当数组下标越界时,JavaScript会提示undefined

7.1通过元素获取其下标(indexOf)

let arr = [1,2,3,4,5];
console.log(arr.indexOf(4));

7.2截取数组(slice)

arr.slice(1,3);

类似于substring,也是包头不包尾

7.3在数组尾部操作(push和pop)

arr.push(99,100) ;
arr.pop();

push是在数组尾部加上元素,pop是弹出数组尾部的最后一个元素。

将数组看成一个栈,先进后出,下标小的在下面,下标大的在上面。

7.4在数组头部操作(shift和unshift)

arr.unshift(33,66);
arr.shift();

unshift是在数组头部加上元素,shift是弹出数组头部的一个元素

7.5数组排序跟顺序颠倒(sort和reverse)

arr.unshift("d")
4
arr
Array(4) [ "d", "a", "b", "c" ]

arr.sort()
Array(4) [ "a", "b", "c", "d" ]

arr.reverse()
Array(4) [ "d", "c", "b", "a" ]

7.6合成新数组(concat)

Array(4) [ "d", "c", "b", "a" ]

arr.concat(1,2,3)
Array(7) [ "d", "c", "b", "a", 1, 2, 3 ]
arr
Array(4) [ "d", "c", "b", "a" ]

注意:该方法并没有对原来的数组进行修改,只是将原来的数组和新输入的数组合成了一个新的数组并返回

7.7使用特定连接符拼接数组(join)

arr
Array(4) [ "d", "c", "b", "a" ]

arr.join("$")
"d$c$b$a" 

8.对象

8.1对象定义

定义对象用大括号 {}

定义数组用中括号 [ ]

var student={
    name="dada",
    id=1234,
    age=18
}

属性之间用逗号隔开,最后一个不需要逗号

8.2动态删减增加对象属性

var student={
  name:"xiao"
}
undefined
delete student.name // 删除
true
student.age=18   // 增加
18
student
Object { age: 18 }

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

student
Object { age: 18 }

student['age']
18
'age' in student
true 

8.3判断属性值是否在对象中

student
Object { age: 18 }

student['age']
18
'age' in student
true 

8.4判断一个属性是否是这个对象自身拥有的,而并非来自其父类

'age' in student
true
'toString' in student
true
student.hasOwnProperty('toString')
false
student.hasOwnProperty("age")
true 

流程控制

forEach循环和for...in循环

arr.forEach(function (value){
    console.log(value);
})
for (let arrKey in arr) {
    console.log(arrKey);
    alert(arr[arrKey]);
}
for (let arrKey of arr) {
    console.log(arrKey);
    alert(arr[arrKey]);
}

forEach是一个函数,用来获得数组的每一个元素,遍历数组。

for...in是获取数组的下标索引。

for...of是获取数组的每一个元素的值。

Map和Set(es6新增特性)

Map和Set的基本用法

let map=new Map([["xie",99],["yan",77],["nige",0]]);
let nige=map.get("nige");
alert(nige);
map.set("nige",32);
nige=map.get("nige");
alert(nige);

let set=new Set([1,2,3,1,1,1]);
set.add(4);
set.delete(1);
let is=set.has(2);
alert(is);
set.clear();

Map里面放一个二维数组,可以通过get(key)来获取number的值,set方法可以修改或增加属性。

Set里面是一个无序自动去重复的列表,可以用add和delete方法对其进行增减操作。clear函数清除Set里的所有元素,has函数判断Set里面是否含有某个数字。

遍历Map和Set(iterator迭代器)

for (let mapElement of map) {
    alert(mapElement);
}

for (let number of set) {
    alert(number);
}

函数

定义函数

function abs(a){
      if (a>3){
        return 1;
      }else {
        return 0;
      }
    }


var abs=function (a){
      if (a>3){
        return 1;
      }else {
        return 0;
      }
    }

第一种跟Java很像,所以多用第一种

第二种是使用了匿名函数,把函数赋值给abs,通过abs来调用函数

调用函数

abs(x);

调用函数跟Java一致。

参数问题:JavaScript可以传递任意个参数,也可以不传递参数。

如何判断参数是否存在?

答:利用arguments函数检查参数的数量并对其进行判断

如何规避参数不存在的情况?

答:进行判断然后抛出一个异常

arguments

用来获取当前函数的所有参数并使其成为一个数组。

    function abs(a){
        for (let i = 1; i <arguments.length ; i++) {
            console.log(arguments[i]);
        }
      if (a>3){
        return 1;
      }else {
        return 0;
      }
    }

rest

function abs(a,...rest){
        for (let i = 0; i < rest.length; i++) {
            console.log(rest[i]);
        }
      if (a>3){
        return 1;
      }else {
        return 0;
      }
    }

对剩下的参数进行操作,多余的参数成为一个新的数组。

与arguments相比,少了函数要用到的参数,数组中的元素都是函数未定义的。排除了已定义的参数。

变量的作用域、let、const

function f1() {
    var a=3;
    var b=2;
    function f2() {
        var a=1;
        console.log(a);
    }
    console.log(a);
    f2();
}
f1();

函数f1()中包含函数f2(),f2()可以访问f1()中的变量,但f1()不能访问f2()中的变量。

当f1()跟f2()的变量重名时,而f2()需要用到重名的变量会优先调用自己的变量,有点像就近原则。

函数查找变量会由内而外的查找,内部函数的变量会屏蔽外部函数的变量。

自动提升变量的作用域

function f1() {
    var a="hh";
    function f2() {
        var a=1;
        console.log(a);
    }
    console.log(a+b);
    var b="world"
    f2();
}
f1();

输出结果:
hhundefined
1

b的定义是在console.log(a+b);之后,但是最终输出为hhundefined。

JavaScript引擎自动将b提前定义了,但并没有给b赋值。

所有变量的定义都放在函数的头部,便于代码维护。

全局对象window

var a="hello";
var b="world";
window.alert(a+b);

alert就是全局对象的一个全局变量。

"use strict"
var a="hello";
var b="world";
var before_alert=window.alert;
before_alert(123);
window.alert=function () {

}
window.alert(123);
window.alert=before_alert;
window.alert(a+b);

JavaScript实际上只有一个全局作用域,任何变量(函数也可以被视为变量),假设没有在函数作用范围内被找到,函数就会向外查找,如果最终没有在全局作用域找到,就会报错referenceError。

规范

如果将我们所有的全局变量都绑定到window上,那么当引用不同的JavaScript文件时,所用到的全局变量可能会发生冲突。为了减少冲突我们就会自己定义一个唯一的空间用来储存全局变量,把自己的代码全部放入这个空间中,减少全局变量命名冲突的问题。

let和const

for (var i = 0; i < 10; i++) {
    console.log(i);
}
console.log(i+1);

for循环中i的值会影响之后的i值

所以我们现在都用let来定义局部变量

for (let i = 0; i < 10; i++) {
    console.log(i);
}
console.log(i+1);

let用来定义局部变量,只在其局部作用域有效,不会影响之后的i值

const就是用来定义常量的。

方法的定义和调用、apply

定义方法

var xiebowen={
    name: 'xiebowen',
    birth: 2003,
    age:function () {
        var now =new Date().getFullYear();
        return now-this.birth;
    },
    age2:function () {
        return 2;
    }
}

对象中的函数即为方法,定义方法与定义函数的形式不同,在对象中定义多个方法时中间要用逗号隔开。

方法调用

function age1() {
    return 100;
}
var xiebowen={
    name: 'xiebowen',
    birth: 2003,
    age:function () {
        var now =new Date().getFullYear();
        return now-this.birth;
    },
    getAge:age1
}

在对象中调用window下的函数作为方法。

getAge:age1是将getAge变成一个方法,而getAge:age1()是将getAge变成一个变量,使用这个变量时会直接调用age1()方法

apply

function getAge(){
    var now =new Date().getFullYear();
    return now-this.birth;
}
var xiebowen={
    name: 'xiebowen',
    birth: 2003,
    age:getAge
};
getAge.apply(xiebowen,[]);

apply函数可以改变this的指向目标。

在这里如果写成age:getAge(),那么age是一个变量,而且由于getAge()中使用了this且没有指向任何目标,此时就会报错。age这个变量就没有被定义,this也未被定义。

Date日期对象

var now =new Date();
now.getFullYear(); //年
now.getMonth();  //月
now.getDate();   //日
now.getDay();    //星期几
now.getHours();   //时
now.getMinutes();  //分
now.getSeconds();  //秒
now.getTime();   //时间戳  从1970 1.1 00:00至今的毫秒数
new Date(1686364859935 );   //将时间戳转换为当前时间

JSON对象

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

格式:

1.对象都用{}

2.数组都用[]

3.所有的键值对都用key:value

var uesr = {
    name:'xiebowen',
    age:18
}
var json=JSON.stringify(uesr);
var obj=JSON.parse('{"name":"xiebowen","age":18}');

JSON.stringify就是将string字符串转换成JSON字符串,JSON.parse就是解析。

class继承方法

class people {
    constructor(name) {
        this.name=name;
    }
    intro(){
        alert(1);
    }
}
class kid extends people{
    constructor(name,age) {
        super(name);
        this.age=age;
    }
}
var p1=new people('hong');
var k1=new kid('lan',8);

跟Java很像。

在JavaScript中每一个对象都有其prototype原型对象,object是源头。

操作BOM对象

window对象(浏览器窗口)

window.innerHeight 
window.outerHeight 

获取浏览器的一些属性来进行判断

疑问:难道浏览器的自适应拉伸啥的就是利用了这个属性进行判断然后改变布局的吗?

navigator.appVersion
"5.0 (Windows)"
navigator.appName
"Netscape" 

screen(屏幕)

screen.width
2560
screen.height
1440 

屏幕尺寸

location(当前页面的URL信息)

location.assign('https://www.bilibili.com/video/BV1JJ41177dip=19&vd_source=46c106b0d438741a12998552df0f4ce6')      //跳转到网址
location.host
"localhost:63342" 
location.href
"http://localhost:63342/MyJavaScript/4.%E5%8F%98%E9%87%8F%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E3%80%81let%E3%80%81const/index.html?_ijt=s0r5fvt9ee7qj6s0dbe2dtmvrr&_ij_reload=RELOAD_ON_SAVE" 

document(当前页面的文档信息)

document.title
"火狐主页"
document.title=111
111 
var sn=document.getElementById('li');
var sn1=document.getElementsByClassName();

获取具体的文档树节点

document.cookie 

获取cookie

history对象

history.back()
history.forward()

页面前进后退

操作DOM对象

1、BOM是Browser Object Model的缩写,即浏览器对象模型。 BOM和浏览器关系密切。 浏览器的很多东西可以通过JavaScript控制的,例如打开新窗口、打开新选项卡(标签页)、关闭页面,把网页设为主页,或加入收藏夹,等等…这些涉及到的对象就是BOM。 2、DOM是Document Object Model的缩写,即文档对象模型。

其实文档对象模型就是一个树结构模型。

获取dom节点的方法

  	document.getElementById()
    document.getElementsByTagName()
    document.getElementsByClassName()

问题:document.getElementById()无效,无法获取到对应的id对象

解决方法:将script标签放到body标签后,这个函数的使用要放在对应id的后面,不然无法获取到对象。

更新dom节点

nav.style.display='block' 
nav.style.color='blue' 

nav.innerHTML='<strong>321</strong>'     //修改HTML元素
nav.innerText=1234101          //修改文本

删除dom节点

<body>
<h1 id="nav">red</h1>
<h2>blue</h2>
<h3>yellow</h3>
</body>
<script>
    var son=document.getElementById('nav');
    var father=nav.parentElement;
    father.removeChild(son);
    
    father.removeChild(father.children[0]);
</script>

先获取你要删除的dom节点,再获取它的父节点,然后通过父节点的removeChild()方法删除目标节点。

删除节点是一个动态的过程,当你删除一个节点时,其children是在变化的。例如其下标就会发生变化。

创建新的dom节点

    var newP=document.createElement('p');   //创建一个新的p元素
    newP.id='first';    //给这个元素的id赋值为first
    newP.innerText='一秒钟的瞬间就已注定'    //设置这个元素的文本
    var mylink=document.createElement('link');
    mylink.setAttribute('type','text/css');  //设置属性,意为type="text/css"
    var myStyle=document.createElement('style');
    myStyle.innerText='body{background-color:red}';
    var myHead=document.getElementsByTagName('head')[0];
    myHead.appendChild(myStyle);

第二种设置属性的方法通用性更强。

插入dom节点

使用innerHTML可以对空的dom节点插入一个新的元素,但如果这个dom节点非空,那么这个操作会覆盖原来的元素。

所以我们通常使用append或insertBefore方法来插入节点

var list1=document.getElementById('list_1');
var list2=document.getElementById('list_2');
list2.append(list1); 

append方法是将节点插入在目标节点的后面,而insertBefore则是将节点插入在目标节点的前面。

var p1=document.getElementById('a');
var p2=document.getElementById('b');
var p3=document.getElementById('c');
var list=document.getElementById('list');
list.insertBefore(p3,p2);

操作表单

获取表单元素并更改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="main.html" method="get">
    账号:<input type="text" name="text" id="1">
    密码:<input type="password" name="password" id="2">
    <span>性别 :</span>
    <input type="radio" name="sex" id="man" value="man">男
    <input type="radio" name="sex" id="women" value="women">女
    <input type="submit" value="">
    <input type="reset" value="">
</form>
</body>
<script>
    var account=document.getElementById('1');
    var password=document.getElementById('2');
    var boy=document.getElementById('man');
    var girl=document.getElementById('women');

    account.value=123123;
    password.value=12345;
    boy.checked=true;
</script>
</html>

当需要对表单进行操作时,可以先获取表单元素,然后通过变量.value来获得以及更改表单元素的值。

当遇到单选框、多选框时,可以通过变量.checked来查看该元素是否被选中,并更改元素的选中。

表单提交验证及前端MD5加密

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<!--
onsubmit是表单属性,为表单绑定一个提交事件,当返回值为false时不予提交。
-->
<form action="main.html" method="get" onsubmit="return check()">   
    <p>账号:<input type="text" name="account" id="account"></p>
    <p>密码:<input type="password" name="input-password" id="input-password"></p>
    <p><input type="hidden" name="password" id="password"></p>
    <span>性别 :</span>
    <input type="radio" name="sex" id="man" value="man">男
    <input type="radio" name="sex" id="women" value="women">女
    <p>
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </p>
</form>
</body>
<script>
    function check() {
        var pwd=document.getElementById('input-password');
        var md5pwd=document.getElementById('password');
        md5pwd.value=md5(pwd.value);
        // md5加密,将密码用md5加密后再提交。
        return true;
    }
</script>
</html>

在上述代码中,我定义了两个密码框,第一个密码框是可见的,用户可以在这个密码框输入密码。

第二个密码框是不可见的,用户输入的密码经过MD5加密后通过这个不可见的密码框提交。

jQuery初见

两种引用方式

1.在jQuery官网下载然后导入自己的项目再引用

2.直接引用在线CDNjQuery

jQuery的使用

$('#clk').click(function () {
        alert('1234');
})

公式$('selector').action()

jQuery事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
</head>
<body>
<button id="xc">小丑</button>
</body>
<script>
    $('#xc').mousedown(function (e) {
        var a=document.createElement('p');
        a.innerText='小丑';
        $('#xc').text('旧小丑');
        $('#xc').append(a);
    })
</script>
</html>

上述代码的效果是点击小丑按钮,按钮里原来的小丑会变成旧小丑,而且会增加一个小丑。只有第一次点击有效,之后的点击不会再产生变化。

jQuery操作dom元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
</head>
<body>
<button id="xc">小丑</button>
</body>
<script>
    $('#xc').mousedown(function (e) {
        var a=document.createElement('p');
        a.innerText='小丑';
        $('#xc').text('旧小丑');
        $('#xc').append(a);
    })
    $('#xc').css('color','red'); //将按钮里的小丑颜色变成红色,毕竟红鼻子小丑
</script>
</html>

标签:arr,age,JavaScript,alert,数组,var,document
From: https://www.cnblogs.com/xiebowen/p/17550109.html

相关文章

  • 如何掌握JavaScript面向对象开发相关模式?
    本文学习目标:理解面向对象开发思想掌握JavaSciprt面向对象开发模式不管是JavaScript高级还是针对JavaScript语言本身的一个进阶学习,在开始之前我们先来对JavaScript相关知识点做一个回顾总结。一、JavaScript是什么1.1解析执行:轻量级解释型的语言特点:动态、头等函数(First-classFu......
  • JMeter脚本报错:Cannot find engine named: 'javascript'的解决方法
    本文将介绍如何解决在JMeter版本5.4.1下执行脚本时出现的错误信息“javax.script.ScriptException:Cannotfindenginenamed:'javascript'”。通过将本地JDK版本从18.0.1.1更改为1.8.0_151来解决此问题。当使用JMeter进行脚本执行时,有时可能会遇到以下错误信息:javax.script......
  • 你信不信,只要学几天javascript就可以使用纯原生实现五星评分效果 【附完整代码】
    ......
  • JavaScript 将对象数组按字母顺序排序
    原文链接:JavaScript将对象数组按字母顺序排序这里给出三种解决方案:1.if条件语句+sort()2.localeCompare()+sort()3.Collator()+sort()sort用法语法array.sort(compareFunction)参数值参数描述compareFunction可选。定义替代排序顺序的函数。该函数......
  • 520要通过这种方式告白 html+css+javascript canvas桃心代码 可修改 【附完整代码】
    ......
  • JavaScript|ES6语法
    1箭头函数1)语法constfn=(参数)=>{函数体}constfn=(x)=>x+1简写constfn=(x)=>x+1当函数体中只有一行return时可以同时省略{}和return2)示例<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"......
  • 【JavaScript】js 处理复制函数实现
    consthandleCopy=()=>{if(!keywordList.value.length)returnElMessage.warning('没有数据');consttext=JSON.stringify(keywordList.value);constinput=document.createElement('input');input.setAttribute('readonly......
  • JavaScript加密:常见加密种类、优缺点和代码示例
    当涉及到JavaScript加密时,有多种加密算法和技术可供选择。下面我将列举一些常见的加密种类、它们的优缺点,并提供一些代码案例作为参考。对称加密算法:对称加密算法使用相同的密钥进行加密和解密。常见的对称加密算法包括AES(AdvancedEncryptionStandard)和DES(DataEncryptionS......
  • JavaScript|对象
    1类和对象1)对象的概念对象:一个具体的实体在现实世界中,对象随处可见,一个人,一个学生,一个杯子,一辆汽车,游戏里的一个英雄...都是一个对象2)对象的组成如何描述一个对象呢比如,每个人都有姓名,年龄,性别这些特征.游戏里的英雄都有生命值,攻击力,防御......
  • JavaScript|流程控制
    一.概念流程控制就是来控制代码按照一定结构顺序来执行主要有3种结构顺序条件循环二.顺序顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。三.条件根据不同的条件,执行不同的路径......