JS基础变量类型和计算

变量类型

  • 值类型VS引用类型
  • typeof运算符
  • 深拷贝

值类型

let a =100
let b = a
a = 200
console.log(b)	//100

引用类型

let a = { age:20 }
let b = a
b.age = 21
console,log(a.age)

常见引用类型

const obj  = { x : 100 }
const arr = ['a','b','c']			
const n = null	//特殊引用类型,指针指向为空的地址
//特殊引用类型,但不用于存储数据,所以没有“拷贝,复制函数”这一说
function fn(){}
//

变量计算-类型转换

  • 一、字符串拼接
  • 二、==运算符
  • 三、if语句和逻辑运算
  • 常见的falesly变量
  • if 语句(true和false)
  • 逻辑判断

typeof

.typeof是一个一元运算符,它返回的结果 始终是一个字符串,对不同的操作数,它返回不同的结果。
1. 对于数字类型的操作数而言, typeof 返回的值是 number
2. 对于字符串类型,typeof 返回的值是 string
3. 对于布尔类型,typeof 返回的值是 boolean
4. 对于对象、数组、null 返回的值是 object 。
5. 对于函数类型,返回的值是 function。
6. 、如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。

运用

/如果函数hello()存在则执行
try { 
    if (typeof(eval(hello)) == "function") {
            hello();
        }
} catch (e) { }

}

手写深拷贝


function deepCopy(source,hash = new WeakMap()){
  // 判断如果参数不是一个对象,返回改参数
  if(!isObject(source)) return source;
  if(hash.has(source)) return hash.get(source); // 如何拷贝过该对象,则直接返回该对象
  // 判断参数是对象还是数组来初始化返回值
  let res = Array.isArray(source)?[]:{};
  hash.set(source,res); // 哈希表添加新对象
  // 循环参数对象的key
  for(let key in source){
    // 如果该key属于参数对象本身
    if(Object.prototype.hasOwnProperty.call(source,key)){
      // 如果该key的value值是对象,递归调用深拷贝方法进行拷贝
      if(isObject(source[key])){
        res[key] = deepCopy(source[key],hash);
      }else{
        // 如果该key的value值不是对象,则把参数对象key的value值赋给返回值的key
        res[key] = source[key];
      }
    }
  }
  // 返回返回值
  return res;
};

何时使用 == 何时使用 ===

除了null外,其他一律使用=
===:称为等同符,当两边值的类型相同时,直接比较值,若类型不相同,直接返回false;

==:称为等值符,当等号两边的类型相同时,直接比较值是否相等,若不相同,则先转化为类型相同的值,再进行比较;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值