JavaScript基础

简介: 本文详解JavaScript核心概念:变量类型(值类型与引用类型)、typeof检测、===与==区别及应用场景、内置函数、原型链规则与属性查找机制、instanceof原理,以及函数声明与表达式差异和执行上下文(全局、函数、eval)与调用栈机制。

1 变量类型和计算

1.1 值类型和引用类型的区别?

  1. 值类型:每个变量都会存储各自的值。不会相互影响
  2. 引用类型:不同变量的指针执行了同一个对象(数组,对象,函数)

1.2 typeof可以及检测的数据类型有哪些?

Note

  • 基本数据类型:Undefined null bool string number
  • 关键点:typeof只能区分值类型,不能区分引用类型
  • JS中的基本数据类型:null, undefined, bool, string, number(typeof可以区分除了null以外的四种值类型)
  • typeof 6种类型:Object({},[],null), Undefined, Boolean, Number, Function, String
  • typeof可以区分值类型,typeof null = Object

1.3 JS中===和==的区别?

1.3.1 区别?

== 会进行强制类型转换之后再比较,=== 不会进行强制类型转换的

1.3.2 应用场景?

  1. (用于判断对象属性是否存在):if (obj == null) ===>>> 等价于if (obj == null || obj == undefined),可以简化代码,其他情形都使用===进行比较
  2. 用于判断函数的参数是否存在: function(a, b){ if(a == null) { // ... }}
  3. 对于函数内部或者是一个对象的参数进行判断只会出现undefined, 而不会报错(慎用)

1.3.3 其他?

js中类型转换为false的有哪些(6种):null, undefined, NaN, '', false, 0

1.4 JS中的内置函数有哪些?

Note

  • 内置函数: Object Array Boolean Number String Function Date RegExp Error
  • 内置对象:Math, JSON

2 原型和原型链

2.1 原型链的5条规则

  1. 所有的引用类型(数组,对象,函数),都是具有对象特性的,即可以自由扩展属性(除了null以外)
  2. 所有的引用类型(数组、对象、函数),都有一个proto 属性(隐式原型),这个属性的值是一个普通对象
  3. 所有的函数,都有一个prototype属性(显式原型),这个属性值是一个普通的对象
  4. 所有的引用类型(数组、对象、函数),proto的属性值指向(完全相等)它的构造函数的“prototype”的属性值
  5. 当试图得到一个对象的某一个属性的时候,如果一个对象本身没有这个属性的话,就会去它的proto( 也就是它的构造函数中去寻找这个属性)

2.2 JS中寻找对象属性的过程

  1. 当一个对象没有这个toString()这个属性的时候,就回去自己的隐式原型proto中去寻找这个属性,也就是去自己额构造函数的显示原型prototype中寻找这个属性(对象自身的隐式原型就是他的构造函数的显式原型)
  2. 发现FOO.prototype中也没有这个toString属性,这也是一个对象,name就去这个对象{}的proto中寻找toString()这个属性

2.3 instanceof的作用?

是用于判断【引用类型】属于哪个【构造函数】的方法

Note

总结:f.proto 一层一层向上寻找,能否找到FOO.prototype,找到为true,否则为false

3 作用域和闭包

3.1 函数表达式和函数声明的区别?

  1. 函数声明中函数名是必须的,函数表达式中则是可选的。
  2. 用函数声明定义的函数,函数可以在函数声明之前调用,而用函数表达式定义的函数则只能在声明之后调用。Note

总结:( 根本原因在于解析器对于这两种定义方式读取的顺序不同:解析器会实现读取函数声明,即函数声明放在任意位置都可以被调用;而对于函数表达式,解析器只有在读到函数表达式所在那一行时才会开始执行)

3.2 对执行上下文的理解?

Note

执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。JavaScript中的运行环境大概包括三种情况。

  • a. 全局环境:JavaScript代码运行起来会首先进入的环境
  • b. 函数环境:当函数被调用执行时,会进入被调用的函数中执行代码
  • c. eval(不推荐使用会对JS的执行效率产生影响)

因此在一个JavaScript程序中,必定会产生多个执行上下文,JavaScript引擎会以栈的方式来处理它们,这个栈,我们称其为函数调用栈(call stack)。栈底永远都是全局上下文,而栈顶就是当前正在执行的上下文。当代码在执行过程中,遇到以上三种情况,都会生成一个执行上下文,放入栈中,而处于栈顶的上下文执行完毕之后,就会自动出栈。

相关文章
|
2月前
|
Java 应用服务中间件 微服务
SpringBoot
Spring Boot是Spring框架的扩展,旨在简化Spring应用的初始搭建和开发过程。它通过自动配置、内嵌服务器、起步依赖等特性,减少繁琐的配置,实现快速开发与部署,提升开发者效率,是现代Java开发尤其是微服务架构的重要工具。
 SpringBoot
|
2月前
|
IDE 编译器 开发工具
【2026最新】Dev C++下载安装使用全流程教程(附最新版安装包+图文步骤)
Dev C++ 是一款轻量免费的 Windows C/C++ 集成开发环境,内置 MinGW 编译器,支持 C++11 等标准。安装简便、启动快速,适合新手学习、竞赛与算法训练,是入门 C/C++ 的理想工具。
1172 9
|
2月前
|
存储 弹性计算 人工智能
阿里云服务器租用费用价格表(2026年最新)一年、1个月和1小时收费
2026年阿里云服务器最新价格出炉,涵盖轻量应用服务器、ECS、GPU服务器等多种类型。38元/年起秒杀轻量服务器,99元/年畅享2核2G配置,按月、按小时灵活计费,支持个人开发、企业建站及AI计算全场景需求,高性价比优选。
2458 12
|
2月前
|
运维 安全 算法
别再把端到端加密当护身符了:多租户系统里,合规比加密更难
别再把端到端加密当护身符了:多租户系统里,合规比加密更难
175 17
|
2月前
|
存储 弹性计算 运维
阿里云轻量应用服务器和云服务器区别——ECS和轻量如何选择?
阿里云轻量应用服务器简化易用,适合个人及轻量场景;ECS功能强大、弹性灵活,适用于企业级复杂业务。根据需求选择:轻量型选SWAS,高性能选ECS。
|
2月前
|
机器学习/深度学习 人工智能 算法
论文被拒往往不是因为数据差,而是逻辑崩了:用这条指令重塑你的学术骨架
审稿人看论文只用15分钟,结构决定生死。大多数被拒论文并非数据不行,而是逻辑崩塌。本文提供一套博导级AI指令,通过逆向工程和审稿视角,帮你快速构建逻辑严密、符合规范的论文框架,将写作效率提升10倍,从根源上降低拒稿风险。
220 4
|
2月前
|
安全 数据安全/隐私保护 C++
HTTPS ECDHE 握手全解析
HTTPS ECDHE握手详解:基于椭圆曲线的临时密钥交换,实现前向保密与高效安全。解析TLS 1.2下客户端与服务器如何通过6步完成密钥协商,对比RSA握手机制,揭示ECDHE为何成为现代网站标配。
281 1
|
2月前
|
机器学习/深度学习 数据采集 物联网
大模型指南:一文搞懂LoRA微调
本文详细解析LoRA微调技术,通过低秩分解实现参数高效适配。您将了解其核心原理、实践步骤及效果评估方法,以及如何在消费级GPU上轻量化定制百亿参数大模型,并探索其未来应用与进阶技巧。
1216 13
大模型指南:一文搞懂LoRA微调
|
3月前
|
存储 Java 编译器
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,即泛型信息被移除,替换为原始类型(如Object或限定类型)。擦除后,List<String>和List<Integer>均变为List,导致反射可绕过类型限制。类型检查发生在编译期,针对引用而非对象本身。获取泛型值时自动强转,避免手动转换。但擦除也引发多态冲突、静态成员限制、instanceof失效等问题,需通过桥方法等机制解决。基本类型不可作为泛型参数,静态上下文中的泛型使用也受约束。

热门文章

最新文章