JS基础知识一(变量类型和计算)

  • 提问
  • 变量类型
    • 值类型 vs 引用类型 (堆栈模型)
      • 值类型
      • 引用类型
    • typeof 运算符
    • 深拷贝
  • 变量计算
    • 字符串拼接
    • ==
    • if语句和逻辑运算
      • if语句
      • 逻辑判断

提问

  • typeof 能判断哪些类型
  • 何时使用=何时使用
  • 值类型和引用类型区别
  • 手写深拷贝

变量类型

值类型 vs 引用类型 (堆栈模型)

值类型

//常见值类型
let a //undefined
const s = 'abc' //string
const n = 100 //number
const b = true //boolean
const s = symbol('s') //symbol
//值类型
let a = 100
let b = a
a = 200
console.log(b) //100

引用类型

//常见引用类型
const obj = { x: 100 }
const arr = ['a', 'b', 'c']
const n = null //特殊引用类型,指针指向空地址
//特殊引用类型,但不用于存储数据,没有"拷贝"、"复制函数"这一说
function fn(){}
//引用类型
let a = { age: 20 }
let b = a
b.age = 21
console.log(a.age) //21

typeof 运算符

  • 识别所有值类型(undefined、string、number、boolean、symbol)
  • 识别函数 function
console.log(typeof console.log) //function
console.log(typeof function(){}) //function
  • 判断是否是引用类型(不可再细分
console.log(typeof null) //object
console.log(typeof {x:100}) //object

深拷贝

  • 注意判断值类型和引用类型
  • 注意判断数组还是对象
  • 递归
/*** 深拷贝* @param {Object} obj 要拷贝的对象*/
function deepClone(obj = {}) {if (typeof obj !== 'object' || obj == null) {// obj 是 null ,或者不是对象和数组,直接返回return obj}// 初始化返回结果let resultif (obj instanceof Array) {result = []} else {result = {}}for (let key in obj) {// 保证 key 不是原型的属性if (obj.hasOwnProperty(key)) {// 递归调用!!!result[key] = deepClone(obj[key])}}// 返回结果return result
}
const obj1 = {age: 20,name: 'xxx',address: {city: 'beijing'},arr: ['a', 'b', 'c']
}const obj2 = deepClone(obj1)
obj2.address.city = 'shanghai'
obj2.arr[0] = 'a1'
console.log(obj1.address.city)
console.log(obj1.arr[0])

变量计算

字符串拼接

console.log(100 + '20') //10020

任何类型内容+字符串类型内容相当于字符串拼接,注意转换类型

==

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语句和逻辑运算

if语句

  • truly变量:!!a === true的变量
    if语句中只有truly变量才会执行
  • falsely变量:!!a === false的变量
    除了!!0、!!NaN、!!’’、!!null、!!undefined、!!false,其他都是truly变量

逻辑判断

  • &&
  • ||
  • !
console.log(10 && 0) //0
console.log(0 && 10) //0
console.log('' || 'abc') //'abc'
console.log('abc' || '') //'abc'
console.log(!window.abc) //true

(四)JS基础知识一(深入分析变量类型和计算)【不会变量,别说你会JS】相关推荐

  1. Js基础——变量类型和计算

    JS基础--变量类型和计算 一.基本数据类型 二.引用类型 三.typeof判断数据类型 四.浅拷贝与深拷贝 4.1 浅拷贝 4.2 深拷贝 五.数据类型转换 5.1== 和 === 一.基本数据类型 ...

  2. (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】

    JS基础知识四(异步) 提问 单线程 应用场景 callback hell和promise 提问 同步和异步的区别是什么 手写用Promise加载一张图片 前端使用的异步的场景有哪些 单线程 JS是单 ...

  3. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  4. JS基础知识学习(一)

    JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...

  5. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  6. js基础知识学习(二)

    JS基础知识 JavaScript 数据类型转换 把其它数据类型转换为number类型 isNaN .Number.parseInt.parseFloat 在进行加减乘除数学运算的时候 true-&g ...

  7. 前端学习笔记(js基础知识)

    前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...

  8. php插入js教程,JavaScript_JavaScript入门教程(2) JS基础知识,在什么地方插入 JavaScript  Ja - phpStudy...

    JavaScript入门教程(2) JS基础知识 在什么地方插入 JavaScript JavaScript 可以出现在 HTML 的任意地方.使用标记,你可以在 HTML 文档的任意地方插入 Jav ...

  9. (六)JS基础知识三(走进作用域和闭包)【三座大山之二,不会闭包,基本不会通过】

    JS基础知识三(作用域和闭包) 提问 作用域 自由变量 闭包 this 提问 this的不同应用场景,如何取值 手写bind函数 实际开发中闭包的应用场景,举例说明 创建10个a标签,点击的时候弹出对 ...

最新文章

  1. module.exports 和 export default
  2. 13个月才跑通GitHub模型,机器学习科研入门太难了吧
  3. 如何最好一个管理者?
  4. java mac postgresql_Mac上安装配置和简单使用PostgreSQL(仍然很不懂)
  5. 这次是在没有外网yum仓库的情况下搭建内网yum仓库和无人值守pxe装机
  6. asm 比 ucontext 快
  7. meta name=viewport content=width=device-width,minimum-scale=1.0,maximum-scale=1.0/
  8. 学习笔记(48):Python实战编程-grid布局
  9. UML入门之类图教程
  10. path hdu6705
  11. python 根据名称获取pid_【Python学习笔记】76、常用第三方模块psutil
  12. cesium添加填充_cesium编程中级(四)使用渐变纹理
  13. php 请求远程链接
  14. C语言基础函数(二)
  15. 如何在普通 UIViewController 中使用 UITableView
  16. Java程序设计基础
  17. 编写函数计算正方体体积
  18. 正确使用ViewStub
  19. H5手写签名,适用于手机网页、电脑网页(IE9+)
  20. 垃圾小白羊leetcode刷题记录2

热门文章

  1. SMS短信通API——(1)Java应用发送手机短信
  2. Python实现多行数据读入
  3. TensorFlow学习笔记(十七)tf.nn.conv2d
  4. elasticsearch 安装过程中可遇到的问题
  5. Elasticsearch等同八大全能型的数据产品对比
  6. 为什么国内SaaS很难爆发
  7. 聊聊高并发(十七)解析java.util.concurrent各个组件(一) 了解sun.misc.Unsafe类
  8. python的中文文本挖掘库snownlp进行购物评论文本情感分析实例
  9. 并发工具类(一)等待多线程完成的CountDownLatch
  10. eclipse下web开发中缓存问题