首页 > 技术文章 > 小田js习题

Gurad 2021-08-24 21:36 原文

JS习题整理

1.输出结果

  var A = {
            n: 4399
        };
        var B = function () {
            this.n = 9999
        };
        var C = function () {
            var n = 8888;
        };
        B.prototype = A;
        C.prototype = A;
        var b = new B();
        var c = new C();
        A.n++;
        console.log(b.n);
        console.log(c.n); 
原型链的继承问题,B、C都继承了A中的属性,找B的n属性时,
    this指向对象, c中 只是定义了一个局部变量 和C没有绑定,没有任何关系(执行思路: 先去找自己的对象有没有属性 如果有则)
  console.log(b.n);  在查找 b.n 是首先查找 b 对象自身有没有 n 属性,如果没有会去原型(prototype)上查找  当执行 var b = new B() 时,函数内部 this.n=9999(此时this指向b) 返回b对象,b对象有自身的n属性,所以返回 9999    
console.log(c.n); 同理 当执行 var c = new C() 时,c对象没有自身的n属性,向上查找,找到原型      (prototype)上的 n 属性,因为 A.n++(此时对象A中的n为4400),所以返回4400

2.input节点获取

<form class="file" name="upload">
<input id="file" name="file" class="file"/>
</form

正确方法  document.getElementById("file")[1];
  1. alert(undefined==null)的输出结果是 true

  2. 下列不属于javascript内置对象的是 Window

  3. Math  Date  RegExp  Window   Error
    
    Js中的内置对象都有:  Arguments Array Boolean Date Error function Math Number Object ReExp String
    
    

    6.下面哪些代码执行后i的值为10

let i =1 + {
valueOf() { return 9; }
};

{ valueOf() { return 9; } } 是一个匿名对象,该对象有一个名为valueOf的方法,对象与数字相加时,对象调用自身的valueOf方法转换为数字,故输出 i == 1 + 9 == 10;
 let i = 5;

        function a(i) {
            i *= 2;
        }
        a(i); //i=5;
       i是形参,,属于局部变量,不影响全局变量i的值
        
   let i = 0;
new Array(10).forEach(() => {
i++;
});     
orEach方法按升序为数组中含有效值的每一项执行一次 callback函数,那些未初始化的项将被跳过。new Array(10)创建的数组默认值都是undefined,所以回调函数都会被跳过。

7.当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是

window.history.forward(1);  window.history.forward(-1);
  1. Math.round(-2019.5)等于多少( ) -2019 如果是2019.51 则 答案为-2020

9.以下哪些方法会返回一个数组? 1 、2

1.Object.keys() 
方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
参数:Object.keys(obj) 要返回其枚举自身属性的对象。
返回值:一个表示给定对象的所有可枚举属性的字符串数组。
2.String.prototype.split()  
split() 方法使用指定的分隔符字符串将一个String对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置 返回源字符串以分隔符出现位置分隔而成的一个 Array 
3.Array.prototype.join()
将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。一个所有数组元素连接的字符串。如果 arr.length 为0,则返回空字符串
4.Promise.all()  
Promise.all(iterable);iterable一个可迭代对象,如 Array 或 String。
Promise.all(iterable) 方法返回一个 Promise 实例,
返回值:promise对象

10.对于代码 var a = 10.42; 取出 a 的整数部分

parseInt(a); 转换为整数      Math.floor(a);向下取整,   Math.ceil(x) 向上取整
 Math.round(x) 四舍五入  Math.random(x) 返回0~1 之间随机数, 包含0和不包含1
 例如a=10.51时,如果使用Math.round(a)==11   10.5时,则为10

11.用户在登陆某个账号时,通常是将账号名和密码分别输入到对应的文本框中,现要将账号名和密码连接起来作为用户的唯一标识符 userName.concat(pwd);

append()在被选元素的结尾(仍然在内部)插入指定内容

appendTo() 方法在被选元素的结尾(仍然在内部)插入指定内容

pop() 方法用于删除并返回数组的最后一个元素。

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

Array.isArray() 
instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例
let arr=[1,2,3];
arr instanceof Array; //true 可以检测对象是数组类型
typeof可以判断的类型有number、string、boolean、symbol、undefined、function;   object、array、null 的变量都返回 object
Object.prototype.toString.call([1,2,3])  //返回结果则为 [Object Array] 

13.angularjs1中control间通信最好使用什么方式 ------广播

14.var foo = "10" + 3 - "1"; console.log(foo);

​ // 因为前面有字符串,字符串+Number,数字将转换为字符串, ,而 -字符串则转换为Number ,10+(3-1)=12

15.JS中function能够访问他们的 参数、 局部变量或函数、全局变量、外部函数、的变量或函数

16.下面有关JavaScript中 call和apply的描述,错误的是

call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是 (X)apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入call传入的则是直接的参数列表。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

target属性:

_blank 在新窗口打开网页   _self  在当前窗口打开网页   _top 在当前窗口打开网页,并且替换当前窗口的整个网页  _parent在父窗口中打开网页

css 属性overflow属性定义溢出元素

参数为scroll时,必会出现滚动条参数为auto时候,子元素内容大于父元素时出现滚动条参数为visible时,溢出的内容出现在父元素之外参数为hidden时,溢出隐藏

border:0 和 border:none区别

border:0 只是像素为0在页面看不见,但浏览器对border-width/border-color进行了渲染,已经占内存值了,border:none   相当于没有,浏览器解析的时候就不会作出渲染动作,不会消耗内存值兼容性差异 对于IE6、IE7与标签button、input而言,会出现此情况。 如何让border:none实现全兼容,只需要在哦同一个选择符上添加背景属性即可。

下列函数那些是JavaScript的全局函数?

encodeURI  parseFloat  setTImeout eval   只有setTImeout不是全局函数记忆: 6编码+2数据处理+4数字相关+1特殊编码相关escape()、unescape()、encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponet()2数据 Number()、String()数字相关 isFinite()、isNAN()、parseFloat()、parseInt()特殊相关: eval()

该函数返回结果

  console.log('one');        setTimeout(function () {            console.log('two');        }, 0);        console.log('three');//one three two回调,被回调的函数会被放在event loop里,等待线程里的任务执行完之后才执行event loop里的代码,因此,先执行线程里的,再执行event loop里的setTimeout函数

以下代码执行后的值为

 var result = "75team2017".match(/\d+\w*/g); console.log(result); //返回结果 ["75team2017"]  [&quot;75team2017&quot;]  \d  匹配一个数字,等价于[0-9] \w  匹配字母、数字或者下划线,等价于[A-Za-z0-9_] +  匹配前面的一个表达式一次或者多次, *  匹配前一个表达式0次或者多次 /g 全局匹配   &quot 形式为引号,表达含义 转义字符 &&左为真返回右边,|| 左为假返回右边

下面关于promise的all方法说法错误的是

触发then时可以只带上iterable参数中的部分值,也可以带所有值。(X)iterable是一个全部为promise对象的数组,只要数组中有一个promise实例被reject,那么最终的promise触发catch,只有数组中全部promise实例都resolve才会触发then,并且要带上iterable中全部promise,其中promise实例将会被结果代替

this对象理解

this总是指向函数的间接调用者(而非间接调用者)在不手动改变this指向的前提下,this总是指向函数的直接调用对象IE中attachEvent中的this总是指向全局对象window

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

每个对象都具有一个名为__proto__的属性每个对象都具有一个名为prototype的方法 (x)每个对象的__proto__属性指向自身构造函数的prototype对象不具有prototype属性,只有函数才有prototype属性

推荐阅读