JavaScript

1.JS代码的引用

1.1四种方式

方式一:
< script>< /script>标签包裹 ,可以放在任何位置 ,但是推荐放在 < head>< /head>里
方式二:
单独编写一个文件 (*.js) 来存放 Javascript 代码,然后在需要使用的 html 页面直接引入该 js 文件。好处:可以使 js 文件和 HTML 文件相分离、一个 js 文件可被多个 HTML 文件使用、维护起来也更方便等等。
方式三:
写在< a>标签的href属性里 ,但是要在前面加javascript:
方式四:
一些具备事件的属性 后面直接加 js代码或者js函数的调用 如onclick属性

Attention
方式一方式二不能共存 如果共同出现在一个< script>标签里面 则引用方式优先

2.JS代码中的变量

需注意的有:

  1. 变量没有初始化 默认是undefined
    var a;
    console.log(a); //undefined
  2. 不事先用var声明 则会报错
    console.log(b); //报错

3.运算符

  1. =,==, = = =
    ①=是赋值
    ②= =判断值是否相同 如console.log(“18”==18); //true
    ③= = =先判断类型 再判断 值相同 console.log(“18”= = =18);//false
  2. 逻辑运算符
    ① 一切 变量都是 boolean 类型 0 , null, NaN,undefined, false, " " (这6个 是false),其余的全都是 true
    ② && 和 ||
    && 返回第一个false 否则的话返回最后一个值
    || 返回 第一个 true 否则返回最后一个值
    经典应用
    function fun(x) {
    x=x||0;
    console.log(x);
    } //如果x是非false变量 则输出x;如果是false 的六个变量 则赋值为0

4.函数

  1. 无返回值 则返回 undefined
  2. 匿名函数 不能单独写出来 没意义 会报错
    function (x,y) {
    return x+y;
    } //会报错
    通常 会定义一个变量接受匿名函数,当成一个方法对象 ,调用的时候:变量名()
    var fun=function (x,y) {
    return x+y;
    }
    fun(); //调用
  3. 匿名函数的应用场景
//注意这里传入的callback 只是一个形式参数 后面callback()则是调用传入对象的方法
function fun3(callback) {
	if(callback) {
		callback();
	} else{
		console.log("没有函数传过来");
	}
}
fun3(
		function() {
			console.log("我是一个匿名函数");
		})

fun3();
  1. 传参规则 :①实际参数少于形式参数 ,defined来凑
    ② 实际参数 多于形式参数 ,多了不要
  2. 内置参数
    arguments 的应用 (若干数求和)
function fun() {
//这里arguments是内置参数 ,不需要在形式参数里面定义  即可使用
	var sum=0;
	for(var i=0;i<arguments.length;i++) {
		sum+=arguments[i];
	}
	console.log(sum);
}

fun(1,2,3,4,5);  //15

5. 全局变量、局部变量

5.1声明提前

情形一:say范围内 var username; 提前

var username="zhangsan";

function say() {
	//相当于 var username;
	console.log(username);
	//相当于 username="lisi";
	var username ="lisi";
	console.log(username);
}
say();
//undefined 
//lisi
console.log(username);
//zhangsan

情形二 :username 是全局变量 (和情形一作对比)

 var username="zhangsan";

function say() {
	console.log(username);
	username ="lisi";
	console.log(username);
}
say();
//zhangsan 
//lisi
console.log(username);
//lisi

5.2全局变量的特殊形式

在局部变量位置 (方法内) ,直接 为变量名赋值 ,不加var声明,则是 全局变量

function fun() {
var a=10;
b=20;  //b是全局变量 
}

6.全局函数

6.1parseInt()

如在 “随机出现一个字母” 的demo中使用

7. 面对对象

7.1构造函数

//1.定义构造函数
function Student(name,age) {
	this.name=name;
	this.age=age;
}
//2.创建对象,并赋予属性
var student=new Student("林泽",18);
console.log(student);
//3.获取对象的属性的两种方式(各自的优点)
console.log(student.name);
console.log(student["age"]);

//4.动态添加属性 
student.email="4525@qq.com";
console.log(student["email"]);
//5.原型
Student.prototype.set=function() {
	console.log("原型set");
}
var s1=new Student();
s1.set();

Attention

  1. 构造函数形式和函数类似,不过 首字母通常大写
  2. 对象 取得属性的两种方式 :
    ①对象 . 属性名 ②对象[“属性名”]
    方式二的两个优点:可以去到特殊的属性名 如 “background-color” ; 同时也可以取一些关键字的属性名 如 class
  3. 对象可以动态添加 属性 (原本没有的可以直接添加 ,原本有的 可以覆盖)
  4. 原型: 直接为整个 构造函数提供新的属性 这样创造的每个对象都有这种属性
    如 Student.prototype.set=function() { console.log(“原型set”); }

1.var b; (默认为undifined ,但是 var不能省略)
5. console.log(a,b) 输出 a b
6. augument是内置变量 形式参数的()内不写 也可以直接应用

8.参数传递

基本类型传递的是值的拷贝
引用类型传递的是 地址值的拷贝

//1.基本类型传的是值 的拷贝

function f1(num) {
	console.log(num);
	num+=100;
	console.log(num);
}
var num1=100;
f1(num1);
console.log(num1);
//2.引用类型传的是内存地址值的拷贝
function Student (name,age) {
	this.name=name;
	this.age=age;
}

function f2(s) {
	console.log(s);
	s.name="改正的name";
	console.log(s);
}

var s=new Student("林泽",18);
f2(s);
console.log(s);

在这里插入图片描述

9.内置对象

9.1用类调用方法还是用对象调用方法

看API
如 String 对象 有
创建对象调用
在这里插入图片描述
直接调用
在这里插入图片描述

9.2Array对象

9.2.1创建数组的四种方式

var arr1=new Array();
console.log(arr1);
console.log(arr1.length);

var arr2=new Array("哈哈","嘎嘎");
console.log(arr2);
console.log(arr2.length);

var arr3=["哇哇","呱呱"];
console.log(arr3);
console.log(arr3.length);

var arr4=new Array(4);
console.log(arr4);
console.log(arr4.length);

9.2.2数组的常用方法

  1. concat(array1, array2, …, arrayX):连接两个或更多的数组,并返回结果。
  2. join(separator):把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
  3. reverse():颠倒数组中元素的顺序(该方法会改变原来的数组,而不会创建新的数组)。
  4. slice(start[, end]):从某个已有的数组返回选定的元素(返回的是一个新数组)。 [slaɪs], 切片
  5. pop():删除并返回数组的最后一个元素。
  6. shift():删除并返回数组的第一个元素。
  7. push(newelement1, newelement2, …, newelementX):向数组的末尾添加一个或更多元素,并返回新的长度。
  8. unshift(newelement1, newelement2, …, newelementX):向数组的开头添加一个或更多元素,并返回新的长度。
  9. splice(index, howmany, element1, …, elementX):用于插入、删除或替换数组的元素。[splaɪs], 拼接
//定义一个方法 将指定数组的指定索引处的值改变为newnum 
function arrayFunction(arr,index,newnum) {
	 arr.splice(index,1,newnum);
	 return arr;
}

9.2.3遍历数组的三种方式 和map

  1. 第一种
    var arr=[“小明”,“小红”,“小刚”];
    for(var i=0;i<arr.length;i++) {
    console.log(arr[i]);
    }
  2. 第二种
    arr.forEach(function(item,index,array) {
    console.log(index,"---->",item);
    })
  3. 第三种(数组中 i是索引 ,对象中 i是属性名 )
    for(var i in arr) {
    console.log(arr[i]);
    }
    var object={“name”:“lisi”,“age”:13};
    for(var i in object) {
    console.log(i,"—>",object[i]);
    }
  4. map
var arr=["小明","小红","小刚"];
var newarr=arr.map(function(item,index,array) {
	return item+"很搞笑";
})
console.log(newarr);
//["小明很搞笑", "小红很搞笑", "小刚很搞笑"]

9.3Demo

9.3.1. 查看现在日期

 var d=new Date();
var date=d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
console.log(date);

9.3.2. 随机 获得一个字母

var num=parseInt(Math.random()*26 +65);
//console.log(num);
console.log(String.fromCharCode(num));

9.3.3. BOM

  1. window对象用来 跳转
function fun1 () {
	window.location.href="http://www.baidu.com";
}
  1. 表格提交 :
function fun2() {
	document.forms[0].submit();
}
  1. 加载完后 表格自动提交
window.onload=function () {
	document.forms[0].submit();
}

Attention
① < a>标签中 href 后 要加 JavaScript:
而 onclick 属性后直接跟 function()

9.3.4 消息框,确认框,输出框

window.alert弹出
window.confirm 确认框 返回 true 或false 可以用加If判断
window.prompt 输出框 返回的是 输入的字符串
Attention

  1. 都是window 对象的方法 window可以省略

9.3.5 定时器

用到的window对象的方法
setTimeout (function,time) time时间后 进行 function
setInterval(function,interval) 每隔interval 时间后 进行一次 function
clearInterval(timer);取消 Interval定时器

<body>
<a href="javascript:fun1()">3秒跳转百度</a>
<a href="javascript:fun2()">5秒后爆炸</a>
<span id="span">5</span>
</body>
//1.定时跳转  setTimeOut
function fun1 () {
	window.setTimeout(function () {
		window.location.href="http://www.baidu.com";
	},3000)
}
//2. x秒后爆炸  setInterval
//cleatInterval
function fun2 () {
	var time=5;
	var timer=window.setInterval(function() {
		var span=document.getElementById("span");
		span.innerHTML=time;
		time--;
		if(time==0) {
			window.clearInterval(timer);
			console.log("bommmmmmm");
		}else {
			span.innerHTML=time;
		}
	},1000)
}

9.3.6 BOM获取对象

  1. 通过 id ClassName TagName
  2. 其中 classname 和 TagName 获得的是HTMLCollectoin 的伪数组 不能forEach遍历 只能通过 for循环遍历

9.3.7 获取节点Node对象

有这些常用属性:
由父节点 :firstChild lastChild childNodes
由子节点: parentNode previousSibling nextSibling

9.3.8 Element属性操作

10.事件的绑定方式

  1. 方式一:标签内为 onclick属性赋值
<a href="#" onclick=fun1(this,event) id="btn1">点击1</a>
	//第一种绑定方式 
	function fun1(srcEle,event) {
		console.log(srcEle);
		console.log(event);
	}

Attention:
① 这里 event 和 this 是关键字 和 位置无关 (定义的functoin中 可以是function(aaa,bbb) 而绑定中带入 οnclick=function(this,event) 依然表示的是 本标签 和 事件对象
②这种方式只能绑定一个响应函数

  1. 方式二: 为元素的事件属性赋值的方式 元素 . 事件属性 =fun() { }
<a href="#" id="btn2">点击2</a>
window.onload=function() {
	//第二种绑定方式
	var btn2=document.getElementById("btn2");
	btn2.onclick=function(event) {
		console.log(event);
	}

Attention
①此时function()里面不能加 this
②只能绑定一个响应函数

  1. 方式三:获取节点对象后 ,addEventListener(事件,方法),attachEvent(“on”+事件名,方法)
var btn3=document.getElementById("btn3");
	btn3.addEventListener("click",function(event) {
		console.log(event);
		console.log("你点了我一次");
	})
	btn3.addEventListener("click",function() {
		console.log("你点了我两次");
	})

提取一个兼容的方法

function addFunc(srcEle,eventname,func) {if(srcEle.attachEvent) {
	//IE浏览器   这里ie的attachEvent方法 里要加on 
	srcEle.attachEvent("on"+eventname,func);
}else {
	//w3c
	srcEle.addEventListener(eventname,func);
}
}
window.onload=function() {
	var btn1=document.getElementById("btn1")
	addFunc(btn1,"click",function (event) {
		console.log(event);
		console.log("我是btn1");
	})}

Attention
①这种方法 可以绑定多个响应函数
②(不可兼容 )w3c浏览器中有addEventListener方法 ,而IE浏览器中对应的方法是attachEvent 且对应的参数是 “on”+事件名称
③ 可以写一个兼容的addFunction方法,里面用if判断元素是否有 对应的方法 (类似于 Nodelist.forEach 没有对应的方法 则返回undefined,而并非是 Nodelist的属性) 所以在 获取元素后 由 if(srcEle . attachEvent) 来判断是否为 IE浏览器

.JS的Demo

10.1 CRUD

在这里插入图片描述
其中注意function2 原地克隆 要 原地克隆后 把克隆体加过去(克隆体用span3接收) ,原地span2不变

function fun2() {
	var div2=document.getElementById("div2");
	var span2=document.getElementById("span2");
	var span3=span2.cloneNode(true);
	div2.appendChild(span3);
}

function3中注意如何创造有值的span并添加 :document的createElement()方法 (没有by) 并且为 span.innerHTML赋值

function fun3() {
	var span=document.createElement("span");
	span.innerHTML="span";
	var div3=document.getElementById("div3");
	div3.appendChild(span);
}

function4中用到 插入的方法 :父节点 . insertBefore(newNode,refNode);

function fun4() {
	var parent=document.getElementById("character");
	var option=document.createElement("option");
	option.innerHTML="诸葛亮";
	var guanyu=document.getElementById("item2");
	parent.insertBefore(option,guanyu);
}

function5用到 replaceChild(new,old) 方法

function fun5() {
	var guanyu=document.getElementById("item2");
	var weiyan=document.createElement("option");
	weiyan.innerHTML="魏延";
	var parent=document.getElementById("character");
	parent.replaceChild(weiyan,guanyu);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值