前言

引用《JavaScript 高级程序设计第四版》中说的话 ——“从简单的输入验证脚本到强大的编程语言,JavaScript 的崛起没有任何人预测到。它很简单,学会用只要几分钟;它又很复杂,掌握它要很多年。要真正学好用好 JavaScript,理解其本质、历史及局限性是非常重要的”。

面试官:JavaScript 是什么?
我:em... JavaScript 就是 JavaScript...

试想一下,如果面试官问你:JavaScript 是个啥?你会怎么回答呢?说实话,听到这个问题的时候我的脑子是有一瞬间是空白的。我们学了这么久的前端,连最简单的 “JavaScript 是什么?” 这个问题都不能跟面试官马上说出个所以然。今天我们就这个问题来聊一聊,当面试官问你 JavaScript 是什么的时候,你可以从哪几个点切入,尽可能说多、说全并且给面试官留下一个好印象。

JavaScript 的定位是什么?

1. JavaScript 是脚本编程语言

为什么是脚本编程语言呢?我们先来简单看看关于 JavaScript 问世的风风雨雨,一句话带过就是,1995 年网景公司为了解决 页面中简单的表单验证时客户端和服务端通信时延 推出了的一款叫做 JavaScript 的客户端脚本语言并且在当时取得了很大的成果,这时微软决定向 IE 投入更多资源,针对性推出 JScript,再到 Ecma (欧洲计算机制造商协会)推出 ECMAScript (发音为 “ek-ma-script”)国际标准化了两门语言,来解决两个版本并存问题。

脚本语言能干啥呢?它可以在网页上实现复杂的功能,包括操作页面中的 DOM 元素、CSS 样式,能实现交互式的地图,2D/3D 动画,滚动播放的视频等等。JavaScript 在它所在的宿主环境中具有非常强大且灵活的能力,给开发人员提供了更多的可能性。

2. JavaScript 是弱类型语言

这意味着变量可以被隐式地转换为另一个类型。类型的隐藏转换,给 JavaScript 带了了一定的灵活性,但是也增加了规则的复杂度与发生错误的可能性。

  • 二元运算符 + 会把两个操作数转换为字符串,除非两个操作数都为数字类型。这是因为 + 也可以用来连接字符串。
  • 二元操作符 - 会把两个操作数转换为数字类型。
  • 一元操作符,包括 + 和 -,都会把操作数转换为数字。
console.log(1 + '2' === '12')
// true
console.log('3' - '1' === 2)
// true
console.log(+'1' === 1)
// true
console.log(-'1' === -1)
// true

3. JavaScript 是动态类型的

  • 正如大部分脚本语言,其类型与值而不是与变量关联。例如变量可以为数值,随后又可被赋值为字符串。
let a = 233
a = '弹铁蛋同学'
console.log(a)
// '弹铁蛋同学'

  • 可以在运行时直接执行 Javascript 语句
eval("console.log('弹铁蛋同学')")
// '弹铁蛋同学'

4. JavaScript 是单线程的

JavaScript 需要和页面进行交互,操作 DOM 等,如果是多线程的话,会带来很复杂的同步问题。比如,假定 JavaScript 同时有两个线程,一个线程在某个 DOM 节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以这决定了它只能是单线程,

5. JavaScript 解释型语言

解释型语言(英语:Interpreted language)是一种编程语言类型。这种类型的编程语言,会将代码一句一句直接运行,不需要像编译型语言(Compiled language)一样,经过编译器先行编译为机器代码,之后再运行。

6. JavaScript 具有良好的跨平台性

跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如 WindowsLinuxMacAndroidiOS 等)。

JavaScriptECMAScript 有什么区别,以及和 DOMBOM 的关系?

首先简单概括 ECMAScriptDOMBOM 三者概念吧。

DOM

DOM(文档对象模型),提供了与网页内容交互的 方法接口DOM 将整个页面抽象为一组分层节点。HTMLXML 页面的每个组成部分都是一种节点,包含不同的数据。DOM 通过创建表示文档的树,让开发者可以随心所欲地控制网页的内容和结构。使用 DOM API,可以轻松地删除、添加、替换、修改节点。

<html><head><title>Sample Page</title></head><body><p> Hello World!</p></body>
</html>

BOM

BOM(浏览器对象模型),提供了与浏览器交互的 方法接口BOM 主要针对浏览器窗口和子窗口 (frame)。使用 BOM,开发者可以操控浏览器显示页面之外的部分, 比如:

1)弹出新浏览器窗口的能力;
2)移动、缩放和关闭浏览器窗口的能力;
3)navigator 对象,提供关于浏览器的详尽信息;
4)location 对象,提供浏览器加载页面的详尽信息;
5)screen 对象,提供关于用户屏幕分辨率的详尽信息;
6)performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息;
7)对浏览器存储相关的操作比如 cookiessessionStoragelocalStorage 等;
8)其他自定义对象,如 XMLHttpRequestIEActiveXObject

ECMAScript

ECMAScript 描述了 JavaScript 的语法和基本对象:1)语法;2)类型;3)语句;4)关键字;5) 保留字;6)操作符;7)全局对象;

ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版,所以一句话描述就是,ECMAScript 是一套规范,JavaScript 则是 ECMAScript 一种实现。为什么说是一种实现呢,因为 Adobe ActionScript 同样也实现了 ECMAScriptJScript 也同样实现了 ECMAScript

[ES 版本相关]

关系

所以在简单了解了上面几个关键的概念之后我们就很容易得出他们之间的关系啦!在《JavaScript 高级程序设计第四版》中有这样一张图,将 JavaScriptECMAScriptDOMBOM 四者的关系描述的非常清晰。

我们得出结论: ECMAScript、 DOM 、BOM 是 JavaScript 的组成部分。

总结

所以看到文章最后,当面试官问:”JavaScript 是什么 “ 的时候,我们就知道从哪开始说,从哪些方面开始讲。所以如果我们把这篇文章的要点都和面试官说清楚了的话,相信可以给面试官留下一个不至于太糟糕的印象

  • JavaScript 的定位

    • JavaScript 是脚本编程语言
    • JavaScript 是弱类型语言
    • JavaScript 是动态类型的
    • JavaScript 是单线程的
    • JavaScript 解释型语言
    • JavaScript 具有良好的跨平台性
  • JavaScriptECMAScript 的区别,以及和 DOMBOM 的关系

    • DOM(文档对象模型),提供了与网页内容交互的 方法接口
    • BOM(浏览器对象模型),提供了与浏览器交互的 方法接口
    • ECMAScript 描述了 JavaScript 的语法和基本对象

最后还是引用开头那段话,” 要真正学好用好 JavaScript,理解其本质、历史及局限性是非常重要的 “ ,一起共勉~

  • 更多优质有趣的文章,请佛系关注公众号「前端铁蛋」啦
  • Github 原文

参考

  • 《JavaScript 高级程序设计第四版》
  • 维基百科 JavaScript
  • ECMAScript 6 简介

javascript 高级程序设计_所以 JavaScript 到底是什么?我居然懵了????相关推荐

  1. javascript 高级程序设计_重读《JavaScript高级程序设计》

    最近自己在休假,打算闭门几天将<JavaScript高级程序设计>(第3版)这本良心教材再回顾一遍.目前自己进入前端领域两年多,现在重读并记录下这本教材的"硬"知识点 ...

  2. 计算机高级程序开发,2017计算机javascript高级程序设计简介

    2017计算机javascript高级程序设计简介 在JavaScript面世之初,没有人会想到它会被应用的如此广泛,也远比一般人想象中的要复杂强大的多.下面小编整理的关于计算机javascript高 ...

  3. 一行python代码画粑粑_如何阅读《JavaScript高级程序设计》(一)

    题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...

  4. 前端红宝书《JavaScript高级程序设计》核心知识总结

    此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...

  5. 《javascript高级程序设计》笔记:原型图解

    文章直接从原型图解开始的,如果对一些概念不太清除,可以结合后面几节查看 1. 图解原型链 1.1 "铁三角关系"(重点) function Person() {}; var p = ...

  6. javascript高级程序设计pdf_一个老牌程序员推荐的JavaScript的书籍,看了真的不后悔!...

    很多人问我怎么学前端?我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量 ...

  7. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  8. JavaScript高级程序设计(读书笔记)(六)

    本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第六章 面向对象的程序设计 面向对象(Object-Oriented, OO)的语言有一 ...

  9. 《JavaScript高级程序设计》学习笔记(一)

    文章目录 一.什么是JavaScript JavaScript的组成 二.HTML中的JavaScript 2.1 <script>元素 2.1.1 标签位置 2.1.2推迟执行脚本 2. ...

最新文章

  1. shutting down mysql_mysql报这是什么错?
  2. 构建一个计算机网络,计算机网络--网络构建(一)
  3. python open方法1001python open方法_怎样才能写出 Pythonic 的代码 #P1001#
  4. MySQL外键没作用_MySQL 外键索引不生效
  5. [linux]tcpdump抓包
  6. 饱和气压与温度的关系_饱和水蒸气压计算公式,看懂的赶紧来
  7. win10怎样更改系统字体_简单六步,轻松更改Windows系统字体
  8. android简单悬浮窗源码,android悬浮窗源码分析
  9. winform 固定splitContainer某一部分大小
  10. java digester_xml和java对象的解决:Digester | 学步园
  11. 近观香港,远看上海,反思深圳
  12. 青云mysql_青云分布式数据库RadonDB 深度兼容MySQL
  13. 给ssh服务添加谷歌双重认证
  14. php界面入门,web前端入门:一小时学会写页面 - 空酷狗
  15. 又一面试题:一个猎人带着一只狼,一个女人带着两个小女孩,一个男人带着两个小男孩,他们要渡船过河。...
  16. 机器人流程自动化(RPA)术语表
  17. 如何判断img加载完成?
  18. 程序员双十一必备购物清单
  19. Centos7磁盘爆满排查
  20. 园区高效管理的“神器”--快鲸智慧园区管理系统

热门文章

  1. Hadoop常见命令总结
  2. 大数据可视化应用在哪些方面
  3. 大数据可视化的重要性体现在哪里
  4. drupal的php运行版本,Drupal 运行的系统要求
  5. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解
  6. mysql get global_getdata table表格数据join mysql方法
  7. 菁英班OJ赛2022-2-24(第一周)
  8. c语言代码题及答案,c语言编程题精选及答案
  9. 《c++语言导学》——1.3 Hello,World!
  10. Spring之JDBC模板jdbcTemplate