zoukankan      html  css  js  c++  java
  • 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
    

      

     

  • 相关阅读:
    docker建镜像
    注册路由的简易实现
    docker的小技巧记录(如果使用了更多会继续添加)
    Alembic使用
    SQLAlchemy的常用数据类型
    记录SQLAlchemy的基本使用
    linux创建桌面快捷方式
    vim编辑器命令
    redis发布订阅
    谨慎使用mysql的utf8
  • 原文地址:https://www.cnblogs.com/rmty/p/12169830.html
Copyright © 2011-2022 走看看