js基础复习1

    一、typeof 能判断那些类型

    1.识别所有值类型
    2.识别函数
    3.判断是否是引用类型

    二、何时使用===何时使用==

    ==会发生隐式转换,除了==null之外,其他一律用===

    三、值类型和引用类型的区别

    堆栈模型的不同,引用类型指向内存地址
 
 深拷贝:
 
/*
深拷贝
 */

const obj1={
	age:20,
	name:'xxx',
	address:{
		city:"beijing"
	},
	arr:['a','b','c']
}
const obj2=deepClone(obj1);

obj2.address.city='shanghai'

/**
 * @param {object} obj 要拷贝的对象
 * 步骤:
 * 1.判断值类型和引用类型
 * 2.注意判断数组还是对象
 * 3.递归(核心)
 */

function deepClone(obj={}){
	if(typeof obj !=='object' || obj==null){
		// obj是null,或者不是对象或者数组,直接返回
		return obj
	}
	// 定义返回结果:
	let result
	// 判断是数组还是对象:
	if(obj instanceof Array){
		result=[]
	}else{
		result={}
	}
	// 无论对象和数组都可以用for in 遍历
	for (let k in obj){
		// 保证key不是原型上的属性:
		if(obj.hasOwnProperty(k)){
			// 递归:
			result[k]=deepClone(obj[k])
		}
	}

	// 返回结果:
	return result
}


// 流程:
// let result ={},先传入key,key是age,然后执行deepClone,当20传递过去以后因为不是obj,所以直接返回本身20,
// 同理 name,当进行到address的时候因为后面是一个对象,所以会再进入递归

字符串和运算符

	// 字符串拼接
	const a=100+10;//110
	const b=100 + '10' // '10010'
	const c=true +'100' //'true10'

	// ==运算符
	100=='100' //true
	0==''      //true
	0==false   //true
	false =='' //true
	null==undefined //true

	/*规律:除了==null之外,其他一律用 ===,例如:*/
	const obj={x:100}
	if(obj.a==null){

	}
	//相当于
	if(obj.a===null || obj.a===undefined){}


	//if语句和逻辑运算

	//truely变量(真的变量): !!a===true的变量   
	//falsely变量(假的变量): !!a===false的变量

	//const n =100; => !n => false => !n =true ---经过两步非运算出现一个布尔值

	//以下是falsely变量.除此之外都是truly变量

	!!0 === false
	!!NaN===false
	!!''===false
	!!null===false
	!!undefined===false
	!!false===false

	// if语句中判断的就是trule变量和falsely变量
	// truly变量:
	const a=true
	if(a){
		//...
	}
	const b=100
	if(b){
		//....
	}
	//falsely变量
	const c=''
	if(c){
		// ...
	}
	const d=null;
	if(d) {
		// ...
	}
	let e
	if(e){
		//...
	}

	// 逻辑判断
	console.log(10 && 0) //0 因为10是truely变量,返回第二个值
	console.log(0 && 10) //因为0是falsely变量,在与判断中第一个为false直接返回 0
	console.log('' || 'abc') //'abc'
	
	console.log(!window.abc) //true

  

 

猜你喜欢

转载自www.cnblogs.com/rmty/p/12169830.html