js基础(自用)

js基础(复习用)

  • js是一门广泛应用于浏览器客户端的脚本语言
  • JS的书写方式
    1.第一种写法
    在元素标签内部onclick=""属性引用
    2,第二种写法
    在当前网页的script标签中编写
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			alert('我是js代码');
		</script>
	</head>
	<body>
	</body>
</html>
也可以<body>< /body>标签中加入<script>< /script>

第三种写法
将js的代码写到.js的文件中,并在HTML中引用.<script src="x.js">< /script>x=js代码的文件名

基本规则

语句后面要用;号结束
js语法错误会引发后续代码终止,但不会影响其它代码块

<script>
	var a = 10;
	document.write(c);
</script>
<script>
	var b = 20;
	document.write(b);
</script>

&& || !

&&
一定会返回结果,
先看前面的表达式转换为boolean类型
其中:undefind,null,NaN."".0,fales ==>fales
如果为真,则直接返回第二个表达式的值,为假直接返回第一个值,
||
第一个为真就返回第一个和&&相反

转换为boolean值取反

  • alert()弹出内容

  • console.log()打印内容可以在检查的console查看
    console.dir()可以显示一个对象的所有属性和方法

  • 定义变量
    var 变量名 = 变量值; 注意:要加分号结束

  • JS的数据类型
    number: 所有数字, 比如:整数/小数
    bigInt: 数字数据类型 表示的范围值比number大, 精度值高
    string: 字符串类型 单引号双引号都可以
    boolean: 布尔值. 只能是True 或者 false
    Null: 空值, 用来表示尚未存在的对象或地址的引用
    undefined: 声明的变量还未被初始化时,变量的默认值为undefined
    symbol: 符号类型
    object: 对象类型(引用数据类型)
    js加法运算中字符串加数字变为字符串
    查看类型typeof()

定义函数

function 函数名(形参) {函数体}
调用:函数名(实参)传入的形参可以多
arguments 实列表,会把传入的实参保持进arguments
在函数体内有arguments,arguments=[实参]
实参和形参,改变相互影响
形参多于实参,多的部分不具备映射关系

命名函数表达式
var test = function abc() {
` document.write(‘a’);
}
匿名函数表达式
var demo = function() {
document.write(‘b’);
}

立即执行函数
(function f(a,b,c){ console.log(a,b,c)}(1,2,3))
只有表达式才能被执行符号执行,执行后会忘记名字,成为立即执行函数
arguments,callee 为立即执行函数的引用

  • 遍历函数:
function sum() {
        count_length = arguments.length;
        var num = 0;
        for (var i = 0; i < count_length; i++) {
            num += arguments[i];
        }
        return num;
      }
console.log(sum(20,50,10));
  • 条件函数
    if(条件) {满足条件执行的代码}
  • 定义对象和方法
    var 对象名(形参) {
    属性名: 属性值,
    属性名:属性值
    };
var dog= {
	age:10,
	name:'ni'
};
console.log(dog.age)
console.log(dog['age'])

方法

<script>
	function c() {
		console.log('n')
	}
	var a= {
		first : function b() {
				console.log('dog再跑')
				},
		cecond : c
	};
	a.first()
	a.cecond();
</script>
  • 定义数组
    var array = [10, 20, ‘haha’];
    遍历方式一: 正常遍历
    for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
    }
    遍历方式二: 对象遍历
    for (var i in array) {
    console.log(array[i]);
    }
  • 全局对象
    window 程序的窗口. 里面有常见的属性, 如:location. location中的href可以做网页跳转
		<script>
			window.location.href = 'https://taobao.com';
		</script>

运行直接跳转淘宝
document 可以拿到整个网页
document.getElementsByTagName(); 通过标签名
document.getElementById(); 通过id属性
document.getElementsByName(); 通过name属性
docunment.getElementsByClassName() 通过class属性

  • onload(加载)
    可以将js代码写在body体前面
		<script>
			window.onload = funciotn() {
    	// 代码段
    }
		<script>

语句
var score = parseInt(window.prompt(‘接受用户输入信息并赋值’))

typeof() 返回类型
var num = Number(x); 把x转换成数字
var num = parseInt(x);把x转换成整型,会砍断非数字之后的
var num = pareInt(x,16);把x当作16进制,转换成10进制
var num = String(x); 转化成字符串
var num = Boolean(x); 转换成boolean
var num = x.toString(); 把想转换成字符串,undefined和null不能用
var num = x.toString(8);把x转换为8进制

var a = (1, 2) ,号会把第二个返回

隐式转换

isNaN(x); 判断是不是NaN,会在判断前用Nunber()转换

++/-- +/- (正负) */ / /%; 会先把先调用Number

+(加);会调研toString

不发生转换
=== 和!==

预编译

函数声明,整体提升,总是把函数提到最前
变量 声明提升 , 会把声明提在最前,赋值不会

imply agobal 暗示全局变量:如果变量未经声明就赋值,此变量就为全局对象所有如:
function fn() {
var a = b = 10;
}
function fn() {
var c = 10;
}
b是全局变量
一切声明的全局变量,全是windows的属性
预编译发生在函数执行的前一刻
预编译
1.生成临时AO对象
2.找形参和变量声明,将变量和形参作为AO属性名,值为underfined
3.将实参值和形参统一
4.在函数体里找到函数声明,值赋值为函数体

在这里插入图片描述

闭包

当内部函数被保存到外部时,将会生成闭包。

function add() {
	var num = 0;
	function a() {
		console.log(++num);
	}
	return a;
}
var myAdd = add()
myAdd();

a可以拿add的预编译,脱离add的影响

对象

var mrdeng = {
	name : "mrdeng",
	age : "40",
	sex : "male",
	smoke : function () {
		console.log("i am smoking !")
	}
	drink : function () {
		comsole.log("i am drink !")
	}
}


mrdeng.health = 100

delete mrdeng.name

mrdeng.sex = “mimale”

mrdeng.查找内容

对象的创建方法

  1. var obj = {} plainObjedt 对象字面量/对象直接量
  2. 构造函数
    1)系统自带的构造函数 Obje()
    var obj = new Object();和var obj = {};一样
    2)自定义
    function Car() {};和函数定义一样
    对象命名必须按照大驼峰规则,每个字母大写
    var car = new Car();
    function student(name,age){
    this.name = name;
    this.age = age;
    }

原型

  1. 是function对象的一个属性,定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象可以继承原型的属性和方法,原型也是对象
  2. 可以提取共有属性
  3. 对象如何查看原型–>隐式属性 __proto__
  4. 如何查看对象的构造函数——>constructor
  5. 绝大多数对象最终都会继承自Object.prototype也可以继承自null
    Person.prototype ——原型
    Person.prototype = {} 是祖先
 Preson.prototype.name = "Deng";
 Preson.prototype = {age : 18;}
function Person(){}
var person = new Person();
comsole.log(person.name)
__proto__

指向原型,当现在对象没有时,会在只想的原型里去找

Object.create(原型) 用来指定原型
var obj = {name:“sunny”};
var obj1 = Object.create(obj);

call/apply

改变this的指向
test() 和test.call() 作用一样
当call(obj)传值,那么会把调用者的this换成obj,不写会默认。传参从第二位开始
apply 需要传一个arguments

function Person(name,age,sex){
	this.name = name;
	this.age = age;
	this.sex = sex;
}
function Student(name,age,sex,tel,grade){
	Person.call(this,name,age,sex);
	this.tel = tel;
	this.grade = grade;
}
var student = new Student(a,b,c,d,e);
function Student(name,age,sex,tel,grade){
	Person.apply(this,[name,age,sex]);
	this.tel = tel;
	this.grade = grade;
}

继承
extends,inherit

function inherit(Target,Origin){
	function F();
	F.prototype = Origin.prototype;
	Target.prototype = new F();
}
Father.prototype.lastname = "Deng";
function Father(){};
function Son(){};
inherit(Son,Father);
var son = new Son();
var father = Father();

属性的调用

属性访问实质:obj.name --> 隐式转化为obj["name"],所以遍历对象时注意
var obj = {name : "abc"};
obj.name 和 obj["name"]相同

对象的枚举(遍历)

  • for in
  • hasOwnPropetty
  • in
  • instanceof

for in

var obj = {
	name : "13",
	age = 123,
	sex = "male",
	__proto__ : {
		lastName : "kang"
	}
}
for (var i in obj){
	console.log(i);
	console.log(obj[i]);  -->console.log(obj.i);会转化为访问i属性
}

hasOwnPropetty,in

for (var i in obj){
	obj.hasOwnPropetty(i); 判断i是否为obj的属性,返回boolean类型,obj.hasOwnPropetty("lastName");为flase,只判度自身属性
}
“name” in obj   同样返回boolean值,判断是否可用属性,lastName为turn

instanceof
a instanceof b 看a对象的原型链上,有没有b的原型

数组

var arr = [ ];
var arr = new Array(); 只传一个参,则确定数组的长度,传多个则为值
溢出读结果为undefind,溢出写会扩展到写的那位

方法(改变原数组)

  1. push
    在数组最后加入元素
  2. pop
    把数组最后一位剪切出来,返回最后一位
  3. shift
    在前面删除
  4. unshift
    在前面增加,和push相反
  5. sort
    排序,自然排序
    自己添加排序方法:
    1.必须写两形参
    2.看返回值,当为负数,前面的数放在前面,正数后面的数在前,o不动
    sort(dunction(a,b){})
  6. reverse
    把原数组逆转
  7. splice
    arr.splice(从第几位开始,截取长度,{在切口处添加新的数据,在切口处push})

不改变原数组

  1. concat
    连接两个数组,a.concat(b)
  2. join
    把数组每位以参数连接
    a.join("-")把每位以-连接
  3. split
    以参数为断点返回数组
  4. toString
    把数组变成字符串
  5. slice
    一个参数:从第几位截取至结尾
    两个:从第几位截取到第几位
    三个

类数组

像arguments 像数组,不是数组
类数组属性要为索引(数字)属性,必须有length属性
原理Array.prototype.push = function(tareget){
obj[this.length] = target;
obj.length ++;
}

try. . .catch

try{}
catch(e){}

es5标准模式

“use strict”; es5.0严格模式的启动,不在兼容es3的一些不规则语法,使用全新的es5规范
不会对不兼容的浏览器产生影响
用法
全局严格模式:代码逻辑的最顶端
局部严格模式:函数的顶端
不支持with,arguments.callee,func,caller.变量赋值前必须声明,局部this必须被赋值赋值什么就是什么,拒绝重复参数和属性

Dom

DOM定义了表示和修改文档所需要的方法。DOM对象即为宿主对象,有浏览器厂商定义,用来操作html和xml功能的一类对象合集

document代表整个文档
document.getElementById() 选一个id
document.getElementsByTagName() 拿所有标签名
document.getElementsByClassName(),class名
document.getElementsByName(),name名注意:只有部分标签name可生效(表单,表单元素,img,iframe)
document.querySelector() 写css选择器一个,但是是静态选择器,不会更新
document.querySelectorAll() 一组
遍历节点树
var div = document.getElementsByTagName(“div”)[0];
div.pareNode
pareNode 父节点
childNodes 子节点们(文本,元素,属性,注释,document,documentFragment)
firstChild 第一个子节点
lastChild最后一个
nextSibling 后一个兄弟节点
previousSibling 前一个兄弟节点
元素节点树的遍历
parentElement
children
node.childElenmentCount 子节点的个数 ==node.children.length
firstElementChild
lastElementChild
nextElementSibling
previousElementSibling
节点属性
nodeName 元素的标签名,以大写形式表示,只读
nodeValue text节点或comment节点的文本,可读写
nodeType 该节点的类型,只读
元素节点 ————1
属性节点 ————2
文本节点 ————3
注释节点 ————8
document————9
DocunmentFragment————11
attribute Element节点的属性集合

document.createElement() 创建元素节点
document.createTextNode() 创建文本节点
document.createComment()创建注释节点
document.createDocumentFragment() 文档碎片

PARENTNODE.appendChild() 在PARENTNODE里最后面插入,剪切操作
PARENODE.insertBefore(a,b) 在PARENTNODE里,把a插到b之前

parent.removeChild() 父类把子类剪切出来返回
child.remove() 子类销毁

替换

parentNode.replaceChild(new, origin)

元素节点(Element)

属性
innerHTML 代表元素的html内容,可改变html的内容
innerText 文本内容
方法
ele.setAttribute(a,b) 添加属性和属性值,如:

div.setAttribute('id', 'only') --><div id="only"></div>

ele.getAttribute() 取属性值

日期函数Date()

封装函数,打印当前何年何月何日何时,几分几秒
var data = new Date();
返回的都是data创建的时间,不是实时的

定时器

setInteval() window上的方法
setInteval(function(){,1000}) 每过100毫秒会自动执行一次里面的函数,计时不准,可以有返回值,返回唯一的1.2。。。

clearInterval()
clearInterval(x) 清除以x为唯一返回值的serInteval

var i = 0;
        var stem = setInterval(function () {
            i ++;
            console.log(i);
            if (i === 10){
                clearInterval(stem)
            }
        },1000)

setTimeout()
setTimeout(function(){console.log(‘a’);},1000); 推迟1000毫秒执行一次,和setInteval()一样有唯一返回值,不会重叠

setTimeout()
清除setTimeout()

也可以用另一种形式展示

setInterval("console.log('a')",1000)

查看滚动距离
window.pageXOffset/window.pageYOffset 查看现在滚动条距离
document.body.scrollLeft
document.body.scrollTop
document.documentElement.scrollLeft
document.documentElement.scrollTop
兼容问题

function getScrolloffset() {
            if (window.pageXOffset) {
                return {
                    x: window.pageXOffset,
                    y: window.pageYOffset
                }
            }else {
                return {
                    x : document.body.scrollLeft + document.documentElement.scrollLeft,
                    y : document.body.scrollTop + document.documentElement.scrollTop
                }
            }
        }

查看可视区窗口的大小
window.innerWidth
window.innerHeight
document.documentElement.clientWidth
document.documentElement.clientHeight
怪异模式下
document.body.clientWidth
document.body.clientHeight
document.compatMode 判断模式

function getViewportOffset() {
            if (window.innerWidth){
                return {
                    w : window.innerWidth,
                    h : window.innerHeight
                }
            }else {
                if (document.compatMode === "BackCompat"){
                    return {
                        w : document.body.clientWidth,
                        h : document.body.clientHeight
                    }
                }else {
                    return {
                        w : document.documentElement.clientWidth,
                        h : document.documentElement.clientHeight
                    }
                }
            }
        }

查看元素的几何尺寸
div.getBoundingClientRect()
返回一个对象,包含left,right,top,bottom等
返回的结果并不是实时的
查看位置
对于无定位父级的元素,返回相对文档的坐标,对于有定位父级的元素,返回相对于最近的有定位的父级坐标
div.offsetWidth
div.offsetHeight
div.offsetLeft
div.offsetTop
返回最近的有定位的父级
div.offsetParent()

让滚动条滚动
window上有三个方法
scroll(),scrollTo() scrollBy()
用法是将x,y坐标传入。让滚动条滚动到当前位置
scrllBy() 会在之前的数据基础之上做累加

脚本化css

dom.style.rpop
可读写行间样式,没有兼容性问题,碰到float这类的保留字属性,前面应加css。eg:cssFloat
复合属性建议拆解。eg:div.style.border ,写成div.style.borrderWith
组合单词变成小驼峰式3写法。eg:div.style.border-radius --> div.style.borderRadius

查询计算样式
window.getComputedStyle(ele,null)[prop]
第二个参数null为获取伪元素方法,也是唯一方法
计算样式只读
返回计算样式的值都是绝对值,没有相对单位
ie8及以下不兼容
IE独有:ele.currentstyle()

       function getStyle(elem, prop) {
           if (window.getComputedStyle){
               return window.getComputedStyle(elem, null)[prop]
           }else {return elem.currentStyle[prop]}

       }

事件

onclick 点击事件
onfocus 获得焦点
onblur 失去焦点
onchange 值发生改变
onload 加载完毕事件
onsubmit 表单提交事件,表单提交按钮,事件需要boolean类型的返回值
onkeyup 键位弹起
onmouseover 鼠标移入事件
onmouseout 鼠标移出

绑定事件

  1. ele.onxxx = function() {}
    兼容好,但一个元素的同一事件只能绑定一个
    基本等同于写在HTML同行上
  2. obj.addEventListener(事件类型,方法引用,false)
    <div id="only" style="width: 200px;height: 200px;background-color: red;" ></div>
    <script>

        var div = document.getElementById('only');
        div.onclick = function () {this.style.backgroundColor = 'green'}
        div.addEventListener("click", function () {
            console.log('b')
        },false)
        div.addEventListener("click", text,false)
        function text() {
            console.log('c')
        }
  1. obj.attachEvent(‘on’ + 事件类型, 方法引用)
    IE独有

解除事件(若绑定匿名函数。则无法解除)

  1. div.onclick = null;
  2. ele.detachEvent(事件类型, 函数的引用, false);
  3. ele.detachEvent(‘on’ + 事件类型, 函数的引用);

事件处理模型-事件冒泡、捕获

结构上(非视觉)嵌套关系的元素会存在冒泡功能,即同一事件。自子元素冒泡向父元素。(自底向上,同时触发)

       <div style="width: 300px;height: 300px;background-color: red;" >
        <div style="width: 200px;height: 200px;background-color: green;" >
            <div style="width: 100px;height: 100px;background-color: yellow;" ></div>
        </div>
    </div>
    <script>

        var div1 = document.getElementsByTagName('div')[0];
        var div2 = document.getElementsByTagName('div')[1];
        var div3 = document.getElementsByTagName('div')[2];
        div1.addEventListener('click', function(){console.log('div1')},false);div2.addEventListener('click', function(){console.log('div2')},false);div3.addEventListener('click', function(){console.log('div3')},false);

结构上(非视觉)嵌套关系的元素会存在捕获功能,即同一事件。自父元素冒泡向子元素。(自顶向下,同时触发)(IE没有捕获事件

        var div1 = document.getElementsByTagName('div')[0];
        var div2 = document.getElementsByTagName('div')[1];
        var div3 = document.getElementsByTagName('div')[2];
        div1.addEventListener('click', function(){console.log('div1')},true);div2.addEventListener('click', function(){console.log('div2')},true);div3.addEventListener('click', function(){console.log('div3')},true);

当同时有捕获和冒泡,先捕获后冒泡
focus,blue,change,submit,reset,select等事件不触发模型

取消冒泡

e.stopPropagation()
e.cancelBubble = true

    <div style="width: 300px;height: 300px;background-color: red;" >
        <div style="width: 200px;height: 200px;background-color: green;" >
            <div style="width: 100px;height: 100px;background-color: yellow;" ></div>
        </div>
    </div>
    <script>

        var div1 = document.getElementsByTagName('div')[0];
        var div2 = document.getElementsByTagName('div')[1];
        var div3 = document.getElementsByTagName('div')[2];
        div1.addEventListener('click', function(){
            console.log('div1')},false);
        div2.addEventListener('click', function(e){
            //e.stopPropagation();
            e.cancelBubble = true;
            console.log('div2')},false);
        div3.addEventListener('click', function(){
            console.log('div3')},false);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值