js问题一

JavaScript 的核心语法包括?

基本的语法构造(比如变量、操作符、控制结构、语句、注释)和标准库(就是一系列具有各种功能的对象比如Array、Date、Math等)

浏览器提供JavaScript 调用的额外 API有哪几类?

  • BOM(Browser Object Model) 浏览器控制类:操作浏览器
  • DOM(Document Object Model) 页面文档操控类:操作网页的各种元素
    DOM的最小组成单位叫做节点(node),js提供了许多获取和操作节点的方法
  • Web 类:实现互联网的各种功能,http协议,websocket
image.png

JavaScript 的复杂性体现在哪两个方面?

  • JavaScript 要发挥作用,需要掌握大量的外部 API,几乎涉及网络应用的各个方面,掌握它们绝非易事。
  • JavaScript 语言有一些设计缺陷,学习 JavaScript,很大一部分时间是用来搞清楚哪些地方有陷阱。

为何要发明CoffeeScript、TypeScript、Dart 等类JS语言?

因为JS语言设计坑太深,有时为了更合理地编写 JavaScript 程序,就不能用 JavaScript 来写,不得不发明新的语言。

  • TypeScript 是一种微软开源的编程语言。由于JavaScript是弱类型的,TypeScript为JavaScript扩展类和模块的概念。正是由于TypeScript最大的特点是类型化,因此才叫做TypeScript。
  • 和TypeScript 相似的工具语言还有很多,主要分为两个阵营:
    一个是类似 Babel 的阵营,坚持JavaScript 的语法风格编写,为开发者提供最新的 ECMAScript 特性。
    另一个则是Coffeescript、Dart等的阵营,它们的语法与 JavaScript 迥然不同,但最终会编译为JavaScript。
  • Dart最初是由 Google 的 Chrome V8 团队打造。与TypeScript编译JavaScript代码不同,Dart是跳过翻译的步骤,直接在浏览器里面嵌入一个 Dart 解释引擎与 V8 并行。

JavaScript 与 Java 的区别和联系?

  • 联系:JavaScript 的基本语法和对象体系,是模仿 Java 而设计的。
  • 区别:
    • JS的函数是一种独立的数据类型;
    • JS采用基于原型对象(prototype)的继承链;
    • Java 语言需要编译,而 JS 则是运行时由解释器直接执行;

JavaScript 与 ECMAScript 的关系?

ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。ECMAScript 只用来标准化 JavaScript 这种语言的基本语法结构,与部署环境相关的标准都由其他标准规定,比如 DOM 的标准就是由 W3C组织制定的。

什么是语句?

语句(statement)是为了完成某种任务而进行的操作;

语句和表达式的区别?

前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值,一定会返回一个值。表达式不需要分号结尾,一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句。

为何说JavaScript 是一种动态类型语言?

因为变量的类型没有限制,变量可以随时更改类型。

什么是变量提升?

由于JS引擎先解析后运行代码,所以所有变量的声明语句,都会被提升到代码的头部,这就是变量提升。

为何有些开发者习惯将常量写在运算符的左边?

避免不小心将相等运算符写成赋值运算符而引起的未知bug,通过报错提前发现。

if (x = 2) { // 不报错
if (2 = x) { // 报错

为何switch每个case代码块内部的break语句不能少?

否则会接下去执行下一个case代码块,而不是跳出switch结构。

为何switch进行比较时不会发生类型转换?

switch语句后面的表达式,与case语句后面的表示式比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==)。

break 语句和 continue 语句的作用?

跳转作用,可以让代码不按既有的顺序执行。

JavaScript 的数据类型有?

数值、字符串、布尔值三种基本类型,对象这一种复杂类型,undefined和null 两个特殊值,以及ES6 新增的第七种 Symbol 类型。

JavaScript 的“函数式编程”的基础是?

把函数当成一种数据类型,可以赋值给变量

JS中确定一个值是什么类型的方法有?

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法

为何typeof 用来检查一个没有声明的变量不报错?

因为 typeof undefined // "undefined"

为何typeof null返回object?

历史原因造成的,一开始没考虑null,只把它当作object的一种特殊值,后来null独立出来,作为一种单独的数据类型,但需要兼容以前的代码,所以你懂的。。。

null 和 undefined 的区别?

null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

谈谈你对JS转换规则的理解?

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""或''(空字符串)

空数组([])和空对象({})对应的布尔值是?

都是true

为何说JavaScript 语言的底层根本没有整数?

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。1 === 1.0 // true

为何JS中任何一个数都有一个对应的负值?

JavaScript 的64位浮点数之中,有一个二进制位是符号位。

+0 和 -0的区别?

几乎所有场合,正零和负零都会被当作正常的0。唯一有区别的场合是,+0或-0当作分母,返回的值是不相等的。

NaN的作用是?

主要是用于将字符串解析成数字出错的场合。NaN不是独立的数据类型,而是一个特殊数值,typeof NaN。NaN === NaN // false

parseInt 需要注意的有?

  • 字符串头部有空格,空格会被自动去除;
  • 参数不是字符串,则会先转为字符串再转换;
  • 遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分;
  • 第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN;
  • 返回值只有两种可能,要么是一个十进制整数,要么是NaN;
  • 如果第二个参数是0、undefined和null,则直接忽略;

为何使用isNaN之前,最好判断一下数据类型?

因为isNaN只对数值有效,如果传入其他值,会被先转成数值。当isNaN为true的值,有可能不是NaN。

function myIsNaN(value) {
  return typeof value === 'number' && isNaN(value);
}
// 更可靠
function myIsNaN(value) {
  return value !== value;
}

很多项目约定 JavaScript 语言的字符串只使用单引号?

因为HTML 语言的属性值使用双引号,使用双引号的话需要转义。

如何把长字符串分成多行?

在每一行的尾部使用反斜杠

字符串与数组的关系?

字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符,但是无法改变字符串之中的单个字符和length属性。

什么是对象?

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

对象的所有键名加不加引号都可以?

因为对象的所有键名都是字符串

如何理解对象的引用?

如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

如果行首是一个大括号,它到底是表达式还是语句?

JavaScript 引擎的做法是,如果遇到这种情况,无法确定是对象还是代码块,一律解释为代码块。如果要解释为对象,最好在大括号前加上圆括号。

为何数值键名不能使用点运算符?

因为会被当成小数点,只能使用方括号运算符。

什么时候delete命令会返回false?

该属性存在,且不得删除

delete命令可以删除对象的所有属性吗?

只能删除对象本身的属性,无法删除继承的属性,即使delete返回true,该属性依然可能读取到值。

in运算符的问题?

不能识别哪些属性是对象自身的,哪些属性是继承的。可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。

for...in循环有使用注意点有?

  • 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
  • 它不仅遍历对象自身的属性,还遍历继承的属性。

什么是函数?

函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。

JavaScript 三种声明函数的方法?

  • function 命令
  • 函数表达式
  • Function 构造函数(非常不直观,几乎无人使用)

什么是递归?

函数调用自身

为何凡是可以使用值的地方,就能使用函数?

因为JavaScript 语言将函数看作一种值,与其它值(数值、字符串、布尔值等等)地位相同。

如果同时采用function命令和赋值语句声明同一个函数?

总是采用赋值语句的定义

函数name属性和函数的length属性的作用?

获取参数函数的名字和参数个数,函数的length属性与实际传入的参数个数无关,只反映函数预期传入的参数个数。

函数的toString方法

返回一个字符串,内容是函数的源码。

什么是作用域?

指的是变量存在的范围

如果在函数体内修改参数值,会不会影响到函数外部?

  • 如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递,不影响;
  • 如果是复合类型的值(数组、对象、其他函数),传递方式是传址传递。在函数内部修改参数,将会影响到原始值;
  • 如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值;

为何要有arguments对象?

由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。

如何理解闭包?

定义在一个函数内部的函数,本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用处?

  • 读取函数内部的变量
  • 让这些变量始终保持在内存中
  • 封装对象的私有属性和私有方法

为何不能滥用不能滥用闭包?

内存消耗会很大,造成网页的性能问题。

使用立即执行的函数表达式的目的?

  • 一是不必为函数命名,避免了污染全局变量;
  • 二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

数组需要注意的是?

  • 由于数组本质上是一种对象,所以可以为数组添加属性,但是这不影响length属性的值
  • 如果数组的键名是添加超出范围的数值,该键名会自动转为字符串,且length属性没有发生变化。
  • for...in不仅会遍历数组所有的数字键,还会遍历非数字键;
  • 使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性;

数组的某个位置是空位与某个位置是undefined的区别?

如果是空位,使用数组的forEach方法、for...in结构、以及Object.keys方法进行遍历,空位都会被跳过。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容