JavaScript笔记

JavaScript

< script >标签

在 HTML 中,JavaScript 代码必须位于 < script > 与 < /script > 标签之间。

// An highlighted block
<script>
document.getElementById("demo").innerHTML = "JavaScript";
</script>

注释:旧的 JavaScript 例子也许会使用 type 属性:< script type=“text/javascript”>(可以省略)。

JavaScript 引用

JavaScript 函数是一种 JavaScript 代码块,它可以在调用时被执行。
例如,当发生事件时调用函数,比如当用户点击按钮时。

  • < head >中的 JavaScript
// An highlighted block
<!DOCTYPE html>
<html>
<head>
<script>
   document.getElementById("demo").innerHTML = "Hello JavaScript!";
</script>
</head>
<body>
</body>
</html>
  • < body >中的 JavaScript
// An highlighted block
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
   document.getElementById("demo").innerHTML = "Hello JavaScript!";
</script>
</body>
</html>
  • 外部 JavaScript
    外部JavaScript文件可以放在< head >或< body >中
// An highlighted block
<script src="myScript.js"></script>

JavaScript 输出

JavaScript 能够以不同方式“显示”数据:

  • 使用 window.alert() 写入警告框
// An highlighted block
<script>
   window.alert( "Hello JavaScript!";
</script>
  • 使用 document.write() 写入 HTML 输出
// An highlighted block
<script>
   document.write( "Hello JavaScript!";
</script>
  • 使用 innerHTML 写入 HTML 元素
// An highlighted block
<script>
    document.getElementById("demo").innerHTML = "Hello JavaScript!";
</script>
  • 使用 console.log() 写入浏览器控制台
// An highlighted block
<script>
    console.log("Hello JavaScript!");
</script>

JavaScript 变量的声明

  • JavaScript里面的变量的初始化问题:
    定义变量
    严格区分大小写
  • 关键字:
    var——弱类型语言
  • 15种数据类型:
    int uint long ulong sbyte byte string char bool float double dec… object
  • 声明变量格式:
    var 变量名称 是否初始化
  • 命名规则:
    驼峰
  • 声明单个变量:
// An highlighted block
<script>
	var setName;
</script>

如需赋值,可使用等号:

// An highlighted block
<script>
	var setName;
	setName="Hello!";
</script>

声明变量时赋值:

// An highlighted block
<script>
	var setName="Hello!";
</script>
  • 声明多个变量:
// An highlighted block
<script>
	 var b,c;
     console.log(b, c);
     b=c=10;
     console.log(b, c);
</script>

注释:变量在使用之前切记初始化

  • 变量的数据类型:
    number string boolean object null undefined
    typeOf 检测变量的数据类型
// An highlighted block
<script>
     var a=10;
     var b="nihao";
     var c=true;
     var d={};//对象
     var e=[];//数组
     var f=null;//空对象引用
     var g=undefined;
     console.log(typeof a);//number
     console.log(typeof b);//string
     console.log(typeof c);//boolean
     console.log(typeof d);//object
     console.log(typeof e);//object
     console.log(typeof f);//object
     console.log(typeof g);//undefined
     console.log(typeof showname);//function
     function showname(){}
</script>
  • 值类型:值
    值的引用空间不变
  • 引用类型:function 对象
    引用的位置是可变的
  • 变量的提升
    变量会被JavaScript 提前声明
// An highlighted block
<script>
	 console.log(a);//undefined
     var a=10;
     console.log(a);
</script>
  • 变量的作用域
    变量的作用范围
// An highlighted block
<script>
	var a=10;
    function f1(){
        var b=15;
        console.log(b,a);
    }
    function f2(){
        var b=15;
        console.log(b,a);
    }
    f1();
    f2();
</script>

JavaScript 函数的声明

JavaScript面向对象开发

  • 对象:
    世间万物都是对象
  • 属性和行为:
    被动——事件
    主动——方法
  • 关键字:function
// An highlighted block
<script>
	 function show() {
        console.log(1);
    }
</script>

注释:函数也会被提前声明,如果不被提前声明 show is not a function

  • 带返回值的函数
// An highlighted block
<script>
function show() {
        console.log();
        return '1';
    }
</script>
  • 带参函数(形参、实参)
// An highlighted block
<script>
    var a = show();
    console.log(a);
</script>
// An highlighted block
<script>
    function show(name, sex, age) {
        return name;
    }
    var name = showname("张蓝", "女", 18);
    console.log(name);
</script>

注释:如果函数没有参数列表,取值按照集合来取值,key:value 索引

// An highlighted block
<script>
    function showData() {
    console.log(arguments[0], arguments[1],
    arguments.length);
    }
    showData("张蓝", 18);
</script>
  • 匿名函数
    不带函数名称的函数 用变量去接收,匿名函数不提前声明
// An highlighted block
<script>
    var list = function () {
        console.log(arguments);
        return arguments[0];
    }
    console.log(list(1, 2, 3));
</script>
  • 自执行函数
    自执行的函数体,有实参、形参和返回值
// An highlighted block
<script>
    var setA = (function (x, y) {
        console.log(x, y);
        console.log(arguments);
        return x + y;
    })(1, 2);
    console.log(setA);
</script>

JavaScript 闭包

  • 变量的闭包:
    使用别人的局部变量,闭包会大量占用内存,会导致网页内存泄露,尽量避免使用闭包,会将闭包的值存在内存里面
// An highlighted block
<script>
    function f1(){
        var a=10;
        return a;
    }
    function f2(){
        console.log(f1());
    }
    f2();
</script>

注释:
在声明变量时不写var,声明变量为全局变量
js里面定义全局变量,全局方法都是window属性,浏览器最大对象

dom元素的获取

在进行dom元素获取的时候注意获取的元素是否初始化

  • 获取方式(8种)
    常规获取(动态获取):
    document.getElementsByClassName()
    document.getElementById()
    document.getElementsByName()
    document.getElementsByTagName()

在js里面不能进行隐式迭代(不能操作一堆元素 只能操作单个元素)
HTMLCollection——数组,取元素对象,按照索引来取值

// An highlighted block
<script>
    var a=document.getElementsByClassName("block");
    a.innerHTML="11";
    a[0].innerHTML = "11"
</script>
  • 单个对象
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="block" name="blist" id="btn"></div>
<div class="block" name="blist" id="btn1"></div>
<script>
    var a= document.getElementById("btn");
    console.log(a);
</script>
</body>
</html>
  • 集合类型
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="block" name="blist" id="btn"></div>
<div class="block" name="blist" id="btn1"></div>
<script>
    var a1= document.getElementsByName("blist");  
    console.log(a1);
</script>
</body>
</html>
  • HTMLCollection 集合
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="block" name="blist" id="btn"></div>
<div class="block" name="blist" id="btn1"></div>
<script>
    var a2= document.getElementsByTagName("div");
    console.log(a2);
</script>
</body>
</html>
  • 选择器获取

返回单个元素

// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="block" name="blist" id="btn"></div>
<div class="block" name="blist" id="btn1"></div>
<script>
    var a3 = document.querySelector("#btn");
    console.log(a3);
</script>
</body>
</html>

返回的是多个元素 NodeList 集合

// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="block" name="blist" id="btn"></div>
<div class="block" name="blist" id="btn1"></div>
<script>
    var a4=document.querySelectorAll("#btn1");
    console.log(a4);
</script>
</body>
</html>
  • 特定的获取元素
    body 获取
    console.log(document.body);
    html 获取
    console.log(document.documentElement);

dom元素事件

  • 键盘事件
    onkeydown onkeyup onkeypress
  • 鼠标事件
    onmouseover onmousemove onmouseout(包涵垂直离开) onmouseleave(水平离开) onclick ondbclick onmousedown onmouseup oncontentmenu
  • 表单事件
    onfocus onblur onselected onchange
  • 浏览器事件
    onload onreload onresize
    onerror
  • JavaScript事件写法:
  1. 直接在标签上写
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="btn" onclick="showname()">按钮</button>
<script>
	function showname() {
    	alert("张三");
    }
</script>
</body>
</html>
  1. 动态绑定事件
// An highlighted block
<script>
	 var btn = document.querySelector("#btn");
     btn.onclick = function () {
     alert("张三");
     btn.onclick=null;
     }
 </script>
// An highlighted block
<script>
	 btn.onclick=showalert;//不加括号
     function showalert(){
     alert("张三");
     }
</script>

注释:不能一次性绑定多个事件

  1. 事件的监听
  • 事件的冒泡:
    false冒泡 里—外;true捕获 外—里;默认是冒泡
    事件的监听:
    不写第三个参数,默认false,冒泡 —click
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        li {
            height: 30px;
            width: 50px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<ul>
    <li>1</li>
    <p>1111</p>
    <li>2</li>
</ul>
<script>
    var ul = document.getElementsByTagName("ul");
     var li = document.getElementsByTagName("li");
     ul[0].addEventListener("click", function () {
     console.log(1);
     },true);
     li[0].addEventListener("click", function () {
     console.log(2);
     },true);
</script>
</body>
</html>
  • 处理事件冒泡:—阻止事件冒泡
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        li {
            height: 30px;
            width: 50px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<ul>
    <li>1</li>
    <p>1111</p>
    <li>2</li>
</ul>
<script>
    var ul = document.getElementsByTagName("ul");
     var li = document.getElementsByTagName("li");
     ul[0].addEventListener("click", function (e) {
     console.log(1);
     });
     li[0].addEventListener("click", function (e) {
     console.log(2);
     e.stopPropagation();
     });
</script>
</body>
</html>

注释:阻止事件冒泡,在原生js里面阻止事件冒泡是 e.stopPropagation(); return false

  • 事件的执行参数 -有开发者使用的相关属性和方法
// An highlighted block
<script>
    document.body.onkeypress=function (){
    //1.事件的执行对象直接添加事件匿名函数上面
    //获取按键键值
     console.log(e.keyCode);
     //2.可以直接声明变量使用window.event  调用事件的执行对象
     var e=window.event;
     console.log(e);
</script>
  • 事件的委托:click事件委托
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        li {
            height: 30px;
            width: 50px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<ul>
    <li>1</li>
    <p>1111</p>
    <li>2</li>
</ul>
<script>
    var ul = document.getElementsByTagName("ul")[0];
    var li = document.getElementsByTagName("li")[0];
    ul.onclick = function (e) {
        //输出的当前点击的元素
        //找到委托的元素对象
        var child = e.target || e.srcElement;
        console.log(e);
        if (child.nodeName.toLowerCase() == "li") {
            console.log(1);
        }
    }
</script>
</body>
</html>
  • JavaScript this指针
    函数里面的this 指代window对象
    事件里面的this指代当前执行事件的对象

JavaScript 运算符

  • 算数运算符
运算符描 述
+加法
-减法
*乘法
/除法
%系数
++递加
递减
  • 逻辑运算符
运算符描 述
&&逻辑与
丨丨逻辑或
逻辑非
  • 比较运算符
运 算 符描 述
==等于
===恒等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于
?三元运算符

JavaScript 语句

  • 循环语句
  • for 循环
    循环代码块一定的次数
// An highlighted block
<script>
	function myFunction(){
		var x="";
		for (var i=0;i<5;i++){
			x=x + "该数字为 " + i + "<br>";
	}
	document.write(x);
}
</script>
  • for/in 循环
    循环遍历对象的属性
// An highlighted block
<script>
	var txt = "";
	var person = {fname:"Bill", lname:"Gates", age:62}; 
	var x;
	for (x in person) {
  		txt += person[x] + " ";
	}
	document.write(txt);
</script>
  • while 循环
    当指定的条件为 true 时循环指定的代码块
// An highlighted block
<script>
	var x="",i=0;
	while (i<5){
		x=x + "该数字为 " + i + "<br>";
		i++;
	}
	document.write(x);
}
</script>
  • do/while 循环
    while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。
// An highlighted block
<script>
	var x="",i=0;
	while (i<5){
		x=x + "该数字为 " + i + "<br>";
		i++;
	}
	document.write(x);
}
</script>
  • 条件语句
  • If 语句
    只有当指定条件为 true 时,该语句才会执行代码。
// An highlighted block
 <script>
	if (condition)       
  	{       
 		当条件为 true 时执行的代码        
  	}
</script>
  • If…else 语句
    if…else 语句在条件为 true 时执行代码,在条件为 false 时执行其他代码。
// An highlighted block
 <script>
	if (condition)        
  	{       
  		当条件为 true 时执行的代码      
  	}        
	else        
  	{        
  		当条件不为 true 时执行的代码        
  	}
</script>
  • switch
    switch 语句用于基于不同的条件来执行不同的动作
// An highlighted block
<script>
var day=new Date().getDay();
switch (day)
{
case 6:
  x="Today it's Saturday";
  break;
case 0:
  x="Today it's Sunday";
  break;
default:
  x="Looking forward to the Weekend";
}
</script>

JavaScript 元素属性操作

  • 操作当前元素的文本值
    btn.innerHTML 或者btn.innerText
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="btn" class="btnlist" style="width: 100px; border: 1px solid red;">按钮</button>
<script>
	btn.innerHTML="点击我"  //如果给的值里面包含标签   自动解析标签
	btn.innerText="点击我"   //直接显示
	btn.innerHTML="<span>我是按钮</span>";
	btn.innerText="<span>我是按钮</span>";
</script>
</body>
</html>
  • 操作元素的样式
  1. js操作的样式为元素的行内样式
// An highlighted block
 <script>
	btn.style.backgroundColor="red";
	console.log(btn.style.width);
</script>
  1. js不能直接操作内嵌或者外部样式
  2. 如何获取内嵌样式或者外部样式
    console.log(window.getComputedStyle(btn).width);
    getAttribute也可以用来获取自定义的属性
// An highlighted block

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="btn" class="btnlist" style="width: 100px; border: 1px solid red;">按钮</button>
<script>
	console.log(btn.getAttribute("id"));
	console.log(btn.getAttribute("class"));
	console.log(btn.getAttribute("style"));
</script>
</body>
</html>
  • 自定义属性
    规则 data-src
// An highlighted block

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="btn" class="btnlist" style="width: 100px; border: 1px solid red;">按钮</button>
<script>
	btn.setAttribute("data-src", "./img/1.jpg");
    //读取自定义属性
    console.log(btn.getAttribute("data-src"));
</script>
</body>
</html>
  • js里面数据类型的强制转化
// An highlighted block
<script>
	var a = "123";
    console.log(parseInt(a));
    var b = "1.23";
    console.log(parseFloat(b));
    console.log(parseInt(b));
    var c = "100px";
    console.log(parseInt(c));
</script>

JavaScript节点操作及元素创建

childNodes 子节点,包涵文本元素—NodeList集合—length属性
nodeType 1 代表元素 3 代表字符
nodeName 当前节点的名称
nodevalue 标签的值为null,文本节点的值为文本

  • 获取当前元素的子元素的个数—childElementCount
// An highlighted block
<script>
	var nav = document.querySelector("#nav");
    console.log(nav.childElementCount);
</script>
  • 获取当前元素的同胞兄弟元素
    nextElementSibling 属性返回指定元素之后的下一个兄弟元素
    previousElementSibling 属性返回指定元素的前一个兄弟元素
    nextSibling 属性返回元素节点之后的兄弟节点(包括文本节点、注释节点);
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul id="nav">
    <li id="menu">aaa</li>
    <input type="text" value="123"/>
    <li id="menu1">aaa</li>
</ul>
<script>
	var nav = document.querySelector("#nav");
    console.log(nav.nextElementSibling);
    console.log(nav.previousElementSibling);
   	console.log(nav.childNodes[1].nextSibling);
</script>
</body>
</html>
  • 直接获取父元素里面的子集
    firstElementChild 当前元素里面第一个
    firstChild 第一个节点
// An highlighted block
<script>
	var nav = document.querySelector("#nav");
    console.log(nav.firstElementChild);
    console.log(nav.lastElementChild);//反之
    console.log(nav.firstChild);
    console.log(nav.lastChild);//反之
</script>
  • 通过子元素来获取父元素
// An highlighted block
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul id="nav">
    <li id="menu">aaa</li>
    <input type="text" value="123"/>
    <li id="menu1">aaa</li>
</ul>
<script>
	var menu=document.getElementById("menu");
    console.log(menu.parentNode);//parentNode  父节点
    console.log(menu.parentElement);//parentElement  可以获取父元素
    //console.log(menu.parent);
</script>
</body>
</html>
  • 创建dom元素
// An highlighted block
<script>
	var block=document.getElementsByClassName("block");
	var b=document.querySelectorAll(".block");
    // 类似这种获取 getElementsByClassName  动态获取   创建的元素也可以拿到
    var domele=document.createElement("div");
    domele.className="block";
    domele.innerHTML="new";
    block[0].appendChild(domele);追加到当前元素的内容之后
    console.log(b);
</script>

JavaScript JSON对象

  • JSON:
    JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。
  • json单个建立
// An highlighted block
<script>
	var stus = {
        "name": "张三",
        "age": 18,
        "job": "学生"
    }
    console.log(stus);
    //取值的方式
    console.log(stus.name);
    console.log(stus["job"]);
</script>
  • json多个建立
// An highlighted block
<script>
	var student = [
        {
            "name": "李四",
            "age": 20,
            "job": "学生"
        },
        {
            "name": "战三",
            "age": 20,
            "job": "学生"
        },
        {
            "name": "马六",
            "age": 20,
            "job": "学生"
        }
    ]
    console.log(student);
</script>

注释:后台返回的json数据 对象 字符串

  • json的数据类型转化
// An highlighted block
<script>
	var student = [
        {
            "name": "李四",
            "age": 20,
            "job": "学生"
        },
        {
            "name": "战三",
            "age": 20,
            "job": "学生"
        },
        {
            "name": "马六",
            "age": 20,
            "job": "学生"
        }
    ]
    var str = JSON.stringify(student);
    //json字符串转化对象型
    console.log(JSON.parse(str));
    console.log(eval(str));
</script>

JavaScript 数组方法

  • 数组的实例化
// An highlighted block
<script>
	var arr=new Array({});
    console.log(arr);
</script>
  • 数组的赋值
// An highlighted block
<script>
	arr[0]=1;
    arr[1]="a";
    arr[2]=null;
    arr[3]={};
    arr[4]=true;
    arr[5]=undefined;
    arr[6]=function(){};
    console.log(arr[0]);
</script>
  • 数组的简化声明
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
</script>
  • 数组的相关方法
  • concat
    合并数组—返回新的数组
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
    console.log(a.concat(b));
</script>
  • filter
    过滤数组—返回过滤出的值
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	console.log(a.filter(function (val, index, arr) {
        /*if (val % 2 == 0) {
            return val;
        }*/
        return val;
    }));
</script>
  • 数组的遍历
    数组遍历没有返回值,能影响到原数组
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	a.forEach(function (val, index, arr) {
        arr[index]+=val;
    })
    console.log(a.indexOf(2));
</script>
  • join
    将数组转化为字符串
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	console.log(a.join("你好!"));
</script>
  • map
    相当遍历数组,映射一个新的数组
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	var b=a.map(function (val, index, arr) {
            return val*val;
    })
    console.log(b,a);
</script>
  • slice
    截取数组,对原数组无影响
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	console.log(a.slice(1, 3));
    console.log(a);
</script>
  • splice
    截断数组,对原数组有影响
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	console.log(a.splice(0, 3));
    console.log(a);
</script>
  • push
    数组追加—数组的后边追加,返回值是数组的长度
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
	a.push(9)
    console.log(a);
</script>
  • unshift
    数组追加—数组的前边追加,返回数组的长度
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
    a.unshift(7)  
    console.log(a);
</script>
  • shift
    数组删除—数组的前删除
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
    a.shift()
    console.log(a)
</script>
  • pop
    数组删除—数组的后删除
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
    a.pop();
    console.log(a);
</script>
  • reverse
    翻转数组
// An highlighted block
<script>
	var  a=[1,2,3,4];
    var b=[4,5,6];
    a.reverse();
    console.log(a);
</script>
  • sort
    数组排序—默认小-大排序
// An highlighted block
<script>
	var b=[2,1,4,3,6,5];
    console.log(b.sort());
</script>
  • 排序方法(大—小)
// An highlighted block
<script>
	var b=[2,1,4,3,6,5];
    b.sort(function (n1,n2){
        return n1-n2;
    });
    console.log(b);
</script>
  • some
    检测数组里面的值—返回值是true/false
// An highlighted block
<script>
	var b=[2,1,4,3,6,5];
    console.log(b.some(function (val, index, arr) {
        return val == 11;
    }));
</script>
  • reduce
    数组的累加器
// An highlighted block
<script>
	var b=[2,1,4,3,6,5];
    console.log(b.reduce(function (totle, current, index) {
        console.log(totle,current);
        return totle *= current;
    }));
</script>

JavaScript 数组排序

  • 冒泡排序法
// An highlighted block
<script>
	var arr = [3, 2, 0, 1, 7, 5, 4, 6, 9, 8];
    function maopao(array) {
        if (array.length == 1) {
            return array;
        }
        var temp;
        for (var i = 0; i < array.length - 1; i++) {
            for (var k = 0; k < array.length - i - 1; k++) {
                if (array[k] < array[k + 1]) {
                    temp = array[k];
                    array[k] = array[k + 1];
                    array[k + 1] = temp;
                }
            }
        }
        return array;
    }
    console.time();
    console.log(maopao(arr));
    console.timeEnd();
</script>
  • 快速排序法
// An highlighted block
<script>
	var arr = [3, 2, 0, 1, 7, 5, 4, 6, 9, 8];
	function quickSort(array) {
        if (array.length <= 1) {
            return array;
        }
        var center = array.splice(parseInt(array.length / 2), 1);
        var left = []; //相对于中间值  左边放  右边放
        var right = [];
        for (var i = 0; i < array.length; i++) {
            if (array[i] < center) {
                left.push(array[i]);
            }
            else {
                right.push(array[i]);
            }
        }
        return quickSort(left).concat(center).concat(quickSort(right));
    }
    console.time();
    console.log(quickSort(arr));
    console.timeEnd();
</script>
  • 选择排序法
// An highlighted block
<script>
	var arr = [3, 2, 0, 1, 7, 5, 4, 6, 9, 8];
	function selectSort(array){
        if(array.length<=1)
        {
            return array;
        }
        //默认一个值  数组里面第一个
        for(var i=0;i<array.length;i++)
        {
            var temp;
            for(var k=i+1;k<array.length;k++)
            {
                if(array[k]>array[i])
                {
                    temp=array[i];
                    array[i]=array[k];
                    array[k]=temp;
                }
            }
        }
        return array;
    }
    console.time();
    console.log(selectSort(arr));
    console.timeEnd();
</script>

JavaScript 字符串方法

  • concat
    字符串的拼接
// An highlighted block
<script>
	var s="123";
    var b="456";
    console.log(s + b);
    console.log(s.concat(b).concat(s));
</script>
  • charAt
    根据索引返回对应字符
// An highlighted block
<script>
	var s="123";
    var b="456";
    console.log(str.charAt(0));
</script>
  • 查找字符
    indexOf------左–右边去找字符
    lastindexOf------右–左边去找字符
// An highlighted block
<script>
	// 单个参数     直接找字符   返回值是-1  或者索引
    var str="a,b,c,def,ga";
    //也可以遍历字符串
    for(var index in str)
    {
        //console.log(str[index]);
        console.log(str.charAt(index));
    }
    console.log(str.indexOf("a"));
    //两个参数的时候   2  startindex
    console.log(str.indexOf("bc", 0));
    console.log(str.lastIndexOf("a"));
    console.log(str.lastIndexOf("ab",2));
</script>
  • charCodeAt
    根据索引返回当前的ascii 值
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.charCodeAt(0));
</script>
  • fromCharCode
    将ascii 值转化为 字符
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(String.fromCharCode(97));
</script>
  • 字符串的截取
    substr—截取多少长度
    subString—按照索引截取
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.substr(0, 2));
    // 两个参数都是索引
    console.log(str.substring(0, 3));
    console.log(str);
</script>
  • replace
    字符替换—返回值是替换之后的字符串 多个替换使用正则
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.replace("a", "m"));
    console.log(str);
</script>
  • search
    查找字符—查找字符并返回当前索引
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.search('a'));
</script>
  • split
    数据类型转化—将字符串转化为数组
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.split(","));
</script>
  • 大小写转化
// An highlighted block
<script>
    var str="a,b,c,def,ga";
    console.log(str.toUpperCase().toLowerCase());
    console.log(str.toLocaleUpperCase());
</script>

JavaScript 字符串算法

  • 查找字符串里面的最长的单词
// An highlighted block
<script>
    var st = "The quick brown fox jumped bcaked jumped abscefg over the lazy dog 15625765675276";
    function showDanci(str) {
        var arr = st.split(" ");
        var temp = arr[0];
        for (var i = 1; i < arr.length; i++) {
            if (temp.length < arr[i].length) {
                temp = arr[i];
            }
        }
        return temp;
    }
    console.log(showDanci(st));
</script>
  • 数组去重
// An highlighted block
<script>
    var arr = [1, 1, 2, 3, 4, 3, 5, 5, 6, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9];
    function moveNumber(array) {
        for (var i = 0; i < array.length - 1; i++) {
            var temp = array[i];
            for (var k = i + 1; k < array.length; k++) {
                if (temp == array[k]) {
                    array.splice(k, 1);
                    k--;
                }
            }
        }
        return array;
    }
    console.log(moveNumber(arr));
</script>
  • 字符串的翻转
// An highlighted block
<script>
    var str = "abcdefghi";
    console.log(str.split("").reverse().join(""));
</script>
  • 统计一个字符串中出现最多的及其出现的次数给出一个字符串
// An highlighted block
<script>
    var str1 = "cccccccccasdfssaaasasasasaadddddddd";
    function findChar(str) {
        var ss = moveNumber(str.split(""));
        /*[a,c,f,h]*/
        var list = [];
        for (var i = 0; i < ss.length; i++) {
            var count = 0;
            for (var index in str) {
                if (ss[i] == str.charAt(index)) {
                    count++;
                }
            }
            list.push([ss[i], count]);
        }
        var tong = 1;
        for (var i = 0; i < list.length; i++) {
            if (list.length <= tong)break;
            if (list[i][1] > list[i + 1][1]) {
                list.splice(i + 1, 1);
                i--;
            }
            else if (list[i][1] < list[i + 1][1]) {
                list.splice(i, 1);
                i--;
            }
            else {
                tong++;
            }
        }
        return function () {
            var strlist = "";
            for (var i = 0; i < list.length; i++) {
                strlist += list[i][0] + "---" + list[i][1] + "个"
            }
            return strlist;
        }
    }
    console.log(findChar(str1)());
</script>
  • 阶乘
// An highlighted block
<script>
    function jiecheng(n) {
        if (n <= 1) {
            return 1;
        }
        return n * jiecheng(n - 1);
    }
    console.log(jiecheng(5));
</script>

JavaScript Date(日期)对象

日期对象用于处理日期和时间。

  • 设置时间
// An highlighted block
<script>
    var time=new Date("2019 8-13 13:42");
    console.log(time);
    var time=new Date(2019,8,13,13,42);//月份上面有+1情况
    console.log(time);
    var time=new Date();//直接实例化时间
    time.setDate(20)//设置日
    time.setFullYear(2020)//设置年份
    time.setHours(0)//设置小时
    time.setMilliseconds(0)//设置毫秒
    time.setMinutes(0)//设置分钟
    time.setMonth(0)//设置月份
    time.setSeconds(0)//设置秒
    time.setTime()//设置当前时间到1970年0点的总毫秒数
    time.setYear()//设置年份  返回值为119   2019-1900=119
</script>
  • 获取时间(to/get两者获取方法一致)
// An highlighted block
<script>
    var time=new Date("2019 8-13 13:42");
    console.log(time);
    var time=new Date(2019,8,13,13,42);//月份上面有+1情况
    console.log(time);
    var time=new Date();//直接实例化时间
    console.log(time.getDate());//获取日
    console.log(time.getFullYear());//获取年份
    console.log(time.getHours());//获取小时
    console.log(time.getMilliseconds());//获取毫秒
    console.log(time.getMinutes());//获取分钟
    console.log(time.getMonth());//获取月份
    console.log(time.getSeconds());//获取秒
    console.log(time.getTime());//获取当前时间到1970年0点的总毫秒数
    console.log(time.getYear());//获取年份  返回值为119   2019-1900=119
</script>

JavaScript Math(数学)对象

Math对象不需要实例化,可直接使用

  • 常用方法
// An highlighted block
<script>
    console.log(Math);//绝对值
    console.log(Math.abs(-1));
    console.log(Math.PI);
    Math.floor(0.9)//向下取整
    Math.ceil(0.9) //向上取整
    Math.round(4.4) //四舍五入
    Math.max(1, 2) //判断最大值的
    Math.min(1, 2)  //取最小值的
    Math.random()//随机数  0-1  取小不取大
    Math.sqrt(4)  //开平方
    console.log(Math.pow(8, 1 / 3));  //求幂的
    console.log(Math);
    // 三角函数的值,计算得换算为弧度,角度*Math.PI/180
    console.log(Math.sin(180 * Math.PI / 180));
    //6.123233995736766e-17  无限接近0
    console.log(Math.cos(180 * Math.PI / 180));
</script>

JavaScript 计时器

  • setInterval()
    循环计时器,延迟多长时间去反复执行
// An highlighted block
<script>
    setInterval(function () {
     	console.log(1);
    }, 1000);
</script>
  • setTimeout()
    一次性计时器,也可以通过代码制作出循环计时器
// An highlighted block
<script>
    var timer=setTimeout(function (){
     	console.log(1);
    },1000);
</script>
  • 关闭计时器
    clearInterval()
    clearTimeout()
  • settimeout 改装循环计时器
// An highlighted block
<script>
     var count = 0;
     var timer=null;
     showtime();
     function showtime() {
     count++;
     console.log(count);
     if(count>=10)
     {
     clearTimeout(timer);
     return;
     }
     timer=setTimeout("showtime()", 1000);
     }
</script>
  • requestAnimationFrame
    requestAnimationFrame和 setTimeout、setInterval前者在浏览器放小或者切换选项卡的时候会暂停 ,后两个不会暂停
// An highlighted block
<script>
     function loop()
     {
     console.log(1);
     //根据电脑屏幕的fps   16ms 刷新一次  1000/60
     window.requestAnimationFrame(loop);
     }
</script>

注释:requestAnimationFrame需要考虑兼容性问题

JavaScript 自定义对象

  • 标准写法
// An highlighted block
<script>
    var stu=new Object();
    stu.name="张三";
    stu.sex="男";
    stu.age=23;
    stu.job="coffee";
    stu.eat=function (){
        return this.name+"饮食规律";
    }
    stu['marriage']="未婚";
    console.log(stu);
</script>
  • 白话写法
// An highlighted block
<script>
    var students={
        name:"张三",
        sex:"男",
        age:20,
        eat:function (){
            return this.name+"饮食规律";
        }
    };
    students['sleep']=function (){
        return this.name+"起居正常";
    }
    console.log(students);
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值