2021.8.26学习笔记


如果需要匹配包含文本的元素,用下面哪种方法来实现?

A. text()
B. contains()
C. input()
D. attr(name)

正确答案: B

text()是jQuery中的方法,可是设置或返回被选元素的文本内容
contains选择器,选取包含指定字符串的元素,字符串也可以是文本
input()选择器,选取表单元素
attr(name,value)属性操作,设置或返回被选元素的属性和属性值


以下代码执行后,console 的输出是?

let x = 10;
let foo = () => {
   
console.log(x);
let x = 20;
x++;
}
foo();

A. 抛出 ReferenceError
B. 10
C. 20
D. 21

正确答案: A

这题的本质是暂时死区的问题
如图,单单是去掉了在function中let的定义

这里边的console.log的结果是1,证明了是可以访问function之前定义的变量的,
而之所以会产生reference error是因为暂时死区的问题(temperal dead zone)

  • 红宝书描述:When parsing the code, JavaScript engine will still be aware of the let declarations that appearlater in a block, but these variables will be unable to be referenced in any way before the actual declaration occurs.

就是说虽然let语句不像var语句会产生hoisting(变量提升),JavaScript引擎也会意识到在后边的let定义,只是不支持在let声明语句之前引用该变量而已。
所以,只要在同一个block中,let是在后边定义的,就不能在之前引用该变量。与此同时,也不能再去取嵌套外层的值了(x=1)


代码的输出结果为( )

<html>
	<body>
		<script type="text/javascript"> var test=new Boolean(); document.write(test); document.write("<br />"); var test=new Boolean(0); document.write(test); document.write("<br />"); var test=new Boolean(null); document.write(test); document.write("<br />"); var test=new Boolean(""); document.write(test); document.write("<br />"); var test=new Boolean(NaN); document.write(test); document.write("<br />"); </script>
	
	</body>
</html>

A. false false false false false
B. false true false false false
C. false false true test Boolean
D. 其他几项都不对

正确答案: A

Boolean类型转换:
1. 对于String:只有非空字符串为真
2. 对于Number:除了0和NaN之外都为真
3. 对于Boolean:true为真
4. 对于Object:除了null之外都为真
5. undefined为false;


下面哪些属于JavaScript的typeof运算符的可能结果:()

A. symbol
B. int
C. boolean
D. null
E. array
F. undefined
G.string

正确答案: A C F G


下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?( )

A. Array.isArray()
B. instanceof
C. typeof
D. Object.prototype.toString.call()

正确答案: A B D

A:Array 为 js 的原生对象,它有一个静态方法:Array.isArray(),能判断参数是否为数组

B:instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例

C: typeof 能判断类型有:number、string、boolean、symbol、undefined、function; object、array、null 的变量都返回 object
D:Object.prototype.toString() 为 Object 对象的实例方法,默认情况下(即不重写该方法),返回参数的类型字符串。


this对象的理解正确的是 ()

A. 在不改变this指向的前提下,this总是指向函数的直接调用者
B. 如果有new关键字,this指向new出来的那个对象
C. this总是指向函数的非间接调用者
D. IE中attachEvent中的this总是指向全局对象Window

正确答案: A B D


下面的语言中哪些语言是动态语言( )

A. C
B. JavaScript
C. C++
D. CSS
E. Java
F. Objective-C

正确答案: B

  • 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
    Python 和 Ruby 就是一种典型的动态类型语言,其他的各种脚本语言如 JavaScript 也属于动态类型语言。
  • 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++ 是静态类型语言的典型代表,其他的静态类型语言还有 C#、JAVA 等。

关于SVG和CANVAS,下面陈述正确的有?

A. SVG做动画性能要优于CANVAS
B. CANVAS做动画性能要优于SVG
C. SVG产生的dom数量比CANVAS要少
D. CANVAS产生的dom数量比SVG要少
E. CANVAS可以使用css设置动画样式
F. SVG可以使用css设置动画样式

正确答案: D F

SVG与Canvas的区别
SVG
不依赖分辨率
支持事件绑定
大型渲染区域的程序(例如百度地图)
不能用来实现网页游戏
Canvas
依赖分辨率
不支持事件绑定
最合适网页游戏
保存为".jpg"格式的图片


下面哪些技术可用于优化 CSS 图片加载 ?

A. CSSSprite
B. SVGSprite
C. Iconfont
D. Base64

正确答案: A B C D

A,减少对服务器请求
B,体积小,矢量
C,体积小,矢量,集成度高
D, 减少对服务器请求


css中clear的作用是什么?

A. 清除该元素所有样式
B. 清除该元素父元素的所有样式
C. 指明该元素周围不可出现浮动元素
D. 指明该元素的父元素周围不可出现浮动元素

正确答案: C

clear : none | left | right | both.
对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。


DHTML是 ?

1、HTML
2、javascript
3、HTML Dom
4、CSS

A. 1 和 2
B. 3 和 4
C. 都是
D. 都不是

正确答案: C

动态 HTML(DHTML)是指允许开发人员创建高度动画和交互式网站的代码标签和语法。 所以上面的技术都需要。
DHTML 并不是新东西,而是技术的组合; HTML+JS+CSS


void();

该表达式的结果是:

A. undefined
B. TypeError
C. null
D. SyntaxError

正确答案: D

typeof  1; //'number'
typeof (1);//'number'
typeof (); //SyntaxError 语法错误

void  0; //undefined
void (0);//undefined
void (); //SyntaxError 语法错误

关于这段代码正确的结论是:()

var F=function(){
   };
Object.prototype.a=function(){
   };
Function.prototype .b=function(){
   };
var f=new F();

A. f能取到a,但取不到b
B. f能取到a,b
C. F能取到b,不能取到a
D. F能取到a,不能取到b

正确答案: A

(注:从网上找到了一个很详细的答案)
网上有一道美团外卖的面试题是这样的:

Function.prototype.a = 'a';
Object.prototype.b = 'b';
function Person(){
   };
var p = new Person();
console.log('p.a: '+ p.a); // p.a: undefined
console.log('p.b: '+ p.b); // p.b: b 

问为什么?

有不少同学第一眼看上去就觉得很疑惑,p不是应该继承了Function原型里面的属性吗,为什么p.a返回值是undefined呢?
其实,只要仔细想一想就很容易明白了,Person函数才是Function对象的一个实例,所以通过Person.a可以访问到Function
原型里面的属性,但是new Person()返回来的是一个对象,它是Object的一个实例,是没有继承Function的,所以无法访问
Function原型里面的属性。但是,由于在js里面所有对象都是Object的实例,所以,Person函数可以访问到Object原型里面的
属性,Person.b => ‘b’


给网页添加javascript的方式有

A. 使用script标签,将javascript代码写到<script></script>之间
B. 添加外部javascript文件
C. 使用行内javascript
D. 使用@import引入javascript文件

正确答案: A B C

A正确。使用script标签,将javascript代码写到<script></script>之间, 例子:<scriptype="text/javascript"> document.write("Hello World!");</script>
B正确。加外部javascript文件 <script src="xxx.js"></script>
C正确。行内js: javascript:return void(null)javascript:return confirm("……");
D错误。查阅了资料,import用于引入css,js暂未发现这种用法。


以下哪些Array对象的方法不会更改原有数组?

A. concat()
B. splice()
C. map()
D. sort()

正确答案: A C

会改变数组的方法:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()
forEach()

不会改变数组的方法:

filter()
concat() 
slice()
map()

下列代码存在几个变量没有被回收?( )

var i = 1;
var i = 2;
var add = function() {
   
    var i = 0;
    return function()
	{
   
        i++;
        console.log(i);
    }
}();
add();

A. 0个
B. 1个
C. 2个
D. 3个

正确答案: D

代码回收规则如下:
1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收


写出下列代码的执行结果:

new Promise((resolve) => {
   
	console.log('1')
	resolve()
	console.log('2')
	}).then(() => {
   
		console.log('3')
})
setTimeout(() => {
   
	console.log('4')
})
console.log('5')

答案:1 2 5 3 4

js在处理异步操作时利用的是事件循环机制。事件循环机制处理顺序,同步操作<-异步操作(微任务<-宏任务)
由于javascript是单线程任务所以主线程只能同时处理一个任务,所以把异步的事件放在同步的事件处理完成之后再来依次处理。

异步事件又包括微任务和宏任务:
宏任务和微任务关系:微任务执行完后再执行宏任务
微任务操作: 1:Promise,2:MutationObserver
宏任务操作: 1:setTimeout,2:setInterval,3:I/O操作


所以上面代码执行顺序为:
同步:console.log(1)->console.log(2)->console.log(5);
异步:(微任务)console.log(3)->(宏任务)console.log(4);
所以答案为:1 2 5 3 4