JavaScript一些常见知识点

1、=== 和 == 的区别?

简单来说 === 是严格等, ==是相等
== 比较两个运算数的数值看是否相等
=== 比较两个运算数的数值及 数据类型 看是否相等

比较原则:

值类型之间的比较:只有数据类型相同,且数值相等时才能够相同
值类型与引用类型比较:肯定不相同
引用类型间比较:比较他们的引用值(内存地址)

2、NaN 是什么 NaN == NaN ?

NaN:not a number

//demo1
let a = "abc";
let b = 3;
let c = a/b;
console.log(c);   //NaN
console.log(typeof(c));  //number
//demo2
console.log(isNaN(a));  	//true
console.log(isNaN(b));  	//false
console.log(isNaN(c));		//true

NaN是由于运算的返回结果,不是一个有效的数字。返回的失败的结果

NaN不等于NaN:

NaN与所有的值都不想等,包括自己

3、冒泡排序与选择排序

冒泡:前后两两进行比较,如果符合比较的条件,就交换两个数的位置,直到所有的数据,都符合从小到大条件,结束排序。

// 冒泡排序
	let arr = [10, 9, 8, 7, 6, 8];
	// 外循环 循环趟数
	for (let i = 0; i < arr.length - 1; i++) {
		// i=0 4
		// i=1 3
		// i=2 2
		// i=3 1
		// 内循环 循环比较次数
		for (let j = 0; j < arr.length - 1 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				let temp;
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	console.log(arr);

选择排序:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列

//选择排序
		function select(arr) {
			let temp;
			for (let i = 0; i < arr.length; i++) {
				let k = i;
				for (let j = i + 1; j < arr.length; j++) {
					if (arr[k] > arr[j]) {
						k = j;
					}
				}
				temp = arr[i];
				arr[i] = arr[k];
				arr[k] = temp;
			}
			return arr;
		}
		let arr1 = [5, 45, 69, 4, 21, 859, 258, 1024, 353];
		select(arr1);
		for (let i in arr1) {
			document.write(arr1[i] + ",");
		}

4、JS常用的兼容语法

//1、获取非行内样式
function getStyle(obj, attr) { 			//获取非行间样式,obj是对象,attr是值
		if (obj.currentStyle) { 				//针对ie获取非行间样式
			return obj.currentStyle[attr];
		} else {
			return getComputedStyle(obj, false)[attr]; //针对非ie
		}
	};

console.log(getStyle(oBox,"font-size"));
### 滚动事件

//2、兼容问题 获取滚动条移动的垂直距离
//let _top = document.body.scrollTop || document.documentElement.scrollTop;
window.onscroll = function(){
		//console.log("heihei");
		//兼容问题 获取滚动条移动的垂直距离
		let _top = document.body.scrollTop || document.documentElement.scrollTop;
		console.log(_top);
	}
//3、事件对象的兼容
let e = evt||event;

//4、键盘检测兼容

let key = e.keyCode||e.which||e.charCode;

// 5、阻止事件冒泡

e.stopPropagation?e.stopPropagation():e.cancelBubble = true;

// 6、阻止浏览器默认事件

e.preventDefault?e.preventDefault():e.returnValue= false;

//7、事件监听兼容
function addEvent(obj,type,callBack){
        if(obj.addEventListener){//非IE版本
            obj.addEventListener(type,callBack);
        }else{//IE版本
            obj.attachEvent("on"+type,callBack);
        }
    }
    addEvent(document,"click",function(){alert("document")});

5、递归函数

一个函数直接或者间接的调用自己本身

function fun(){
    console.log("fun是递归函数。");
    fun();
}

这个demo中 fun函数就是一个递归函数
但是这个递归函数是一个死循环,因为它没有停止运算的出口。

那如何使用递归

1、在每一次调用自己时,必须是(在某种意义上)更接近于解
2、必须有一个终止处理或计算的出口。就是要有一个标准让函数结束调用函数自身

function age(n){
		let c;
		if(n==1){
			c = 10;
		}else{
			c = age(n-1)+2;
		}
		return c;  //递归出口,返回一个数字
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值