首页 > 编程语言 >11.17 复习JavaScript红宝书的笔记——

11.17 复习JavaScript红宝书的笔记——

时间:2023-11-17 22:00:10浏览次数:35  
标签:instanceof console log 11.17 JavaScript 红宝书 引用 let 变量

一、原始值与引用值

对于原始值和引用值的判断类型各自有对应的操作符,前者可以用typeof操作符

let s = "Nicholas"; 
let b = true; 
let i = 22; 
let u; 
let n = null; 
let o = new Object(); 
console.log(typeof s); // string 
console.log(typeof i); // number 
console.log(typeof b); // boolean 
console.log(typeof u); // undefined 
console.log(typeof n); // object 
console.log(typeof o); // object 

而后者可以用instanceof操作符来判断是什么类型的对象

console.log(person instanceof Object); // 变量 person 是 Object 吗?
console.log(colors instanceof Array); // 变量 colors 是 Array 吗?
console.log(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?

 

二、垃圾回收

(一)JavaScript中的垃圾回收策略目前主流有两种,一是标记清理,当声明一个变量后,进入上下文时就会被标记,垃圾回收程序运行的时候,会标记内存中存储的所有变量(记住,标记方法有很多种)。然后,它 会将所有在上下文中的变量,以及被在上下文中的变量引用的变量的标记去掉。在此之后再被加上标记 的变量就是待删除的了,原因是任何在上下文中的变量都访问不到它们了。随后垃圾回收程序做一次内 存清理,销毁带标记的所有值并收回它们的内存。二是引用计数:是对每个值都记录它被 引用的次数。声明变量并给它赋一个引用值时,这个值的引用数为 1。如果同一个值又被赋给另一个变 量,那么引用数加 1。类似地,如果保存对该值引用的变量被其他值给覆盖了,那么引用数减 1。当一 个值的引用数为 0 时,就说明没办法再访问到这个值了,因此可以安全地收回其内存了。垃圾回收程序 下次运行的时候就会释放引用数为 0 的值的内存。但这个会出现严重的漏洞,现在主流的浏览器基本放弃使用该策略进行垃圾回收。

(二)性能——垃圾回收程序会周期性运行,如果内存中分配了很多变量,则可能造成性能损失,因此垃圾回收的 时间调度很重要。

(三)内存管理——影响浏览器内存泄露的两个主要因素:一是意外声明了全局变量:

function setName() { 
 name = 'Jake'; 
} 

此时,解释器会把变量 name 当作 window 的属性来创建(相当于 window.name = 'Jake')。 可想而知,在 window 对象上创建的属性,只要 window 本身不被清理就不会消失。这个问题很容易 解决,只要在变量声明前头加上 var、let 或 const 关键字即可,这样变量就会在函数执行完毕后离开作用域。

二是使用闭包会不知不觉的造成内存泄漏。

三、原始值包装类型与单例内置对象:1.每种包装类型都映射到同名的原始类型。

2.以读模式访问原始值时,后台会实例化一个原始值包装类型的对象,借助这个对象可以操作相 应的数据。

3.涉及原始值的语句执行完毕后,包装对象就会被销毁。

下面以字符串为例子:

let s1 = new String("some text"); 
let s2 = s1.substring(2); 
s1 = null;

 

 

当代码开始执行时,全局上下文中会存在两个内置对象:Global 和 Math。其中,Global 对象在 大多数 ECMAScript 实现中无法直接访问。不过,浏览器将其实现为 window 对象。所有全局变量和函 数都是 Global 对象的属性。Math 对象包含辅助完成复杂计算的属性和方法

console.log(person instanceof Object); // 变量 person 是 Object 吗? console.log(colors instanceof Array); // 变量 colors 是 Array 吗? console.log(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?

标签:instanceof,console,log,11.17,JavaScript,红宝书,引用,let,变量
From: https://www.cnblogs.com/katyjohn/p/17839543.html

相关文章

  • 端口号错误解决 11.17
    在大数据实验二中遇到问题:端口号错误,导致无法对hdfs中文件进行读取,解决办法:输入shell命令;hdfs getconf-confKeyfs.default.name对端口号进行查看......
  • 11.17每日总结
     今天继续学习Java,跟着B站的视频开始做maven的Javaweb项目总体感受时maven方便了我们对jar包的使用,在未来项目需要用大量jar包时maven会大大减轻我们的工作量......
  • JavaScript-键盘事件
    键盘事件的种类键盘事件由用户击打键盘触发,主要有keydown、keypress、keyup三个事件,它们都继承了KeyboardEvent接口。keydown:按下键盘时触发。keypress:按下有值的键时触发,即按下Ctrl、Alt、Shift、Meta这样无值的键,这个事件不会触发。对于有值的键,按下时先触发keydown事件,再触发......
  • 11.17每日总结
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构;2、能够利用职责链模式解决实际问题。[实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总......
  • 每日总结11.17
    今天做出来了ERP模块的人事管理系统原型,学习了SpringBoot的相关知识。SpringBootStarter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。使编码变得简单,SpringBoot采用JavaConfig的方式对Spring进行配置,并且提供了大量的......
  • 11.17
    “提炼方法”的步骤:设计一个新方法,并按照提炼代码的意图给方法命名。把原来方法中要提炼出的代码直接复制到新的方法中。检查目标方法中的局部变量、引用变量和临时变量,做出相应修改,有时要运用移除临时变量或分解临时变量的策略。在源方法中调用目标方法,取代提炼的代码。通过......
  • javascript 自定义分页组件
    仿boostrap前端分页组件的实现一 写一个前端自定义分页组件,需要考虑以下问题  /*     需要一个<ul id="pagination"></ul>标签   total; // 总数据的数量   pageSize; // 一页显示数量   pageIndex; // 当前页   */ 二实现细节编写html......
  • 11.17每日总结2
    Vue-cli中报错Modulenotfound:Error:Can’tresolve‘vue-router’in‘D:\GithubProject\shoppingsystem\shopping-system\src\router’背景配置尚硅谷的尚品汇环境时,报如下错误:出错的代码//配置路由的地方importVuefrom'vue';importVueRouterfrom'vue-router';//......
  • (javascript)将ztree树结构的数据转成二维数组
    ztree树结构的数据结构如下:[{"id":3990,"name":"泡沫灭火","iconShow":false,"children":[{"id":8616,......
  • JavaScript之splice()
    参考:https://blog.csdn.net/weixin_45726044/article/details/120151153概述splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。一个参数splice(index)——>从index的位置开始,删除之后的所有元素(包括......