JS 由哪几部分组成?

  • ECMAScript:描述了该语言的语法和基本对象。
  • 文档对象模型(DOM):描述处理网页内容的方法和接口。
  • 浏览器对象模型(BOM):描述与浏览器进行交互的方法和接口。

JavaScript 的特点有哪些,写6个?

  • 解释性脚本语言
  • 基于对象
  • 弱类型语言
  • 事件驱动脚本语言
  • 跨平台的脚本语言
  • 单线程语言

列举Java和JavaScript之间的区别?

Java是一门十分完整、成熟的编程语言。相比之下,JavaScript是一个可以被引入HTML页面的编程语言。这两种语言并不完全相互依赖,而是针对不同的意图而设计的。 Java是一种面向对象编程(OOPS)或结构化编程语言,类似的如C ++或C,而JavaScript是客户端脚本语言,它被称为非结构化编程。

JS原始数据类型有哪些?引用数据类型有哪些?

我们知道 JavaScript 是一种弱类型的脚本语言。弱类型就指的是当我们定义变量时,并不需要指定变量的类型,程序在运行的时候会自动判断类型。

那具体有哪些数据类型呢?变量的类型主要分为两类:原始类型和对象类型。

7种原始类型
  • Boolean:用于 true 和 false
  • String:用于字符串:一个字符串可以包含一个或多个字符
  • Number:用于任何类型的数字:双精度64位浮点,最多只能表示2^53 - 1 的整数
  • BigInt(ES10 新定义):用于任意长度的整数
  • Null:用于未知的值 —— 只有一个 null 值的独立类型
  • Undefined:用于未定义的值 —— 只有一个 undefined 值的独立类型
  • Symbol(ES6 新定义):用于唯一的标识符

原始类型都是值,所以也可以叫做值类型。

对象类型(Object)

除了原始类型,其他都是对象类型。对象类型也可以叫做引用类型。
对象类型包括:

  • 普通对象-Object
  • 数组对象-Array
  • 函数对象-Function
  • 正则对象-RegExp
  • 日期对象-Date
  • 数学函数-Math

有哪些方法判断变量的数据类型?

  • typeof
  • instanceof
  • Object.prototype.toString.call()
  • 查看 constructor 属性

new Object(null)输出什么?

{}

谈一谈你对深拷贝和浅拷贝的理解。

  • 数据分为基本数据类型和引用数据类型。深拷贝和浅拷贝只是针对引用数据类型的操作。
  • 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
  • 深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

用Object.assign()拷贝对象的时候,什么时候是深拷贝,什么时候是浅拷贝?

  • 如果属性值为简单类型(如string, number),得到的新对象为深拷贝。
  • 如果属性值为对象或其它引用类型,得到的新对象为浅拷贝。

如何获取一个对象的所有属性名称?

Object.getOwnPropertyNames

值为 false 的 Boolean 对象有哪些?写五个

  • new Boolean();
  • new Boolean(0);
  • new Boolean(null);
  • new Boolean(‘’);
  • new Boolean(false);

nullundefined 的区别?

  • null表示没有对象,即该处不应该有值
  • 作为函数的参数,表示该函数的参数不是对象
  • 作为对象原型链的终点
  • undefined表示缺少值,即此处应该有值,但没有定义
  • 变量被声明了,但没有赋值时,就等于undefined
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined。
  • 对象没有赋值的属性,该属性的值为undefined。
  • 函数没有返回值时,默认返回undefined。

String()toString() 的区别:

  • toString()无法转换null和undefined

breakcontinue 的区别是什么?

  • break 退出整个循环
  • continue 跳过本次循环

setTimeoutsetInterval 有何区别?

  • setTimeout:指定的毫秒数后调用函数或计算表达式
  • setInterval:指定的周期(以毫秒计)来调用函数或计算表达式

setTimeout表示间隔一段时间之后执行一次调用,而setInterval是每隔一段时间循环调用,直至清除。

targetcurrentTarget 的区别?

  • currentTarget当前所绑定事件的元素
  • target当前被点击的元素

documen.writeinnerHTML 的区别?

  • document.write 只能重绘整个页面
  • innerHTML 可以重绘页面的一部分

静态作用域与动态作用域的区别是什么?

  • 静态作用域:函数的作用域在函数定义的时候就决定了
  • 动态作用域:函数的作用域是在函数调用的时候才决定的

encodeURIencodeURIComponent 的区别?

  • encodeURI()/decodeURI():对url编码,解码
  • encodeURIComponent()/decodeURIComponent():对url编码、解码
  • encodeURI 对url中常见的符号,以及网址中有特殊含义的符号不编码
  • java和js的区别 javascript的成熟分类_javascript

  • encodeURIComponent会对"; / ? : @ & = + $ , #编码:
const uri = 'https://baidu.com/?x=你好&y="1"#';
const encoded = encodeURI(uri);
// https://baidu.com/?x=%E4%BD%A0%E5%A5%BD&y=%221%22#
const encoded = encodeURIComponent(uri);
// https%3A%2F%2Fbaidu.com%2F%3Fx%3D%E4%BD%A0%E5%A5%BD%26y%3D%221%22%23
  • encodeURI 编码后还是url,适用于携带参数域名跳转,前后端访问
  • encodeURIComponent 编码后不再是url,适用于作为参数传递

注意:对单引号不编码,双引号编码

for ... offor...in 区别

for…of 用于遍历一个迭代器,如数组:

let letters = ['a', 'b', 'c'];
letters.size = 3;
for (let letter of letters) {
  console.log(letter);
}
// 结果: a, b, c

for…in 用来遍历对象中的属性:

let stus = ["Sam", "22", "男"];
for (let stu in stus) {
  console.log(stus[stu]);
}
// 结果: Sam, 22, 男

exportexport default 的区别?

export与export default均可用于导出常量、函数、文件、模块等

  • 在一个文件或模块中,export可以导出多个,对应的 import导入加{ }
// 导出
export function fn1(){ }
export function fn2(){ }
export function fn3(){ }
// 导入
import {fn1, fn2, fn3} from AAA
  • export default仅可以导出一个,对应的import导入时候不用加花括号

箭头函数和普通函数的区别是什么?

普通函数this:

  • this总是代表它的直接调用者。
  • 在默认情况下,没找到直接调用者,this指的是window。
  • 在严格模式下,没有直接调用者的函数中的this是undefined。
  • 使用call,apply,bind绑定,this指的是绑定的对象。

箭头函数this:

  • 在使用=>定义函数的时候,this的指向是 定义时所在的对象,而不是使用时所在的对象;
  • 不能够用作构造函数,这就是说,不能够使用new命令,否则就会抛出一个错误;
  • 不能够使用 arguments 对象;
  • 不能使用 yield 命令;

如何中断ajax请求?

  • 一种是设置超时时间让ajax自动断开
  • 另一种是手动停止ajax请求,其核心是调用XML对象的abort方法,ajax.abort()

在地址栏输入一个url到页面加载完成的全过程

java和js的区别 javascript的成熟分类_前端_02

  • 解析 HTML并构建DOM树
  • 计算样式构建CSSOM 树
  • 计算图层布局
  • 绘制图层
  • 整合图层,得到页面

什么是事件代理,有什么好处?

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。

优点:减少内存消耗,提高性能

Promise对象有几种状态,分别表示什么?

  • pending:等待中,或者进行中,表示还没有得到结果
  • resolved(Fulfilled):已经完成,表示得到了我们想要的结果,可以继续往下执行
  • rejected:也表示得到结果,但是由于结果并非我们所愿,因此拒绝执行

箭头函数有哪些特点?

  • 不需要function关键字来创建函数
  • 省略return关键字
  • 改变this指向