JavaScript练习题【牛客网】

变量one只声明未赋值,所以其值为undefined,在使用“==”对undefined和null进行比较时,不能将null和undefined转换成其他任何值,并且规定undefined == null返回结果为true,而使用“===”进行比较时,由于“===”需要严格区分数据类型,故undefined === null返回结果为False 

执行以下程序,输出结果为()__牛客网 (nowcoder.com)


for(var i=0;i<5;++i){
    (function(i){
        setTimeout(function(){alert(i+ ' ');},100);
    })(i)
}
//0,1,2,3,4

    <script>
        for(let i=0;i<5;++i){
            setTimeout(function(){
                console.log(i+ ' ');
            },100);
        }
    </script>
//0,1,2,3,4
 
    <script>
        for(var i=0;i<5;++i){
            setTimeout(function(){
                console.log(i+ ' ');
            },100);
        }
    </script>
//5,5,5,5,5

setTimeout() 是异步的,只有等到主线上的都执行完,才会执行异步的,此时i已经变成5。由于共循环了5次,异步队列中存放了 五次setTimeout(),会按照队列的顺序依次执行,且共同访问的是同一个变量。所以每次结果都是5,特别强调一下,这里和setTimetou(function,100)中的100 无关,假如:setTimeout(function,0),变成0 结果也是一样的。

setTimeout() :基于事件循环机制,JavaScript在浏览器的JS引擎线程里的执行顺序,就是先执行主线程里的同步任务,执行完后,再将任务队列里的异步任务的时间回调添加到主线程的执行栈中执行。也就是执行完宏任务后再执行微任务。所以与0无关。

首先:理解for循环是同步的,setTimeout是异步的。

1)for循环是同步的,setTimeout是异步的,每执行一次for循环就会把一个setTimeout放到异步队列里。

2)所以for循环执行5次异步队列里就有5个setTimeout。

3)同步的执行完就会执行异步的,所以等到第5个for循环结束之后,才去执行异步队列的setTimeout。



其次:理解var let 以及for循环的全局作用域。(结果为55555)

1)for(var i=0;i<5;++i){}  相当于var i;  for( i=0;i<5;++i){}    也相当于let i;  for( i=0;i<5;++i){}  (注意let i也是在全局声明的)

2)此时的i是全局变量,setTimeout里访问的都是全局变量的i.

3)i是1时setTimeout里的i也是1,i是2时setTimeout里的i也是2。。。最后全局的i变成5了,才去执行异步队列的setTimeout,所以此时异步队列访问到的i就都是5.



最后:重点理解 let 用于for循环的块级作用域(局部作用域)。(结果为01234)

1)for(let i=0;i<5;++i){}  let在for循环里是有块级作用域的。

此时的i是for循环块级作用域里的i, 传到{}里的i是什么,setTimeout里访问到i就是什么,因为此时setTimeout访问的i不再是全局变量的i,而是传进来的局部变量i。(注意:也是for循环执行完毕之后,才去执行5个异步队列的setTimeout的)

2)如果用var 声明i,也可以用闭包来模仿块级作用域(局部作用域)。

for(var i=0;i<5;++i){

        (function(num){

                setTimeout(function(){

                    console.log(num+ ' ');

                },100);

         })(i);

}

创建立即执行函数并传入参数i。 因为函数的参数是按值传递的,所以i的当前值就赋值给了num,并传递给了setTimeout 中的闭包,在闭包中保存了i当前值的一个副本。

以上代码执行的结果是?_盛趣笔试题_牛客网 (nowcoder.com)


 执行以下程序,下列选项中,输出结果正确的是() for(va__牛客网 (nowcoder.com)


 短路或  如果第一项是true 则结果为true 如果第一项为false 结果 为第二项(第二项不做计算直接返回)

执行以下 JavaScript 代码,输出结果为()_4399游戏笔试题_牛客网 (nowcoder.com)


"+new Array(017)" 这段代码输出为?()__牛客网 (nowcoder.com)


JS中存在块语句,那么请问以下块语句的集合最终输出的值是多少__牛客网 (nowcoder.com)


当文本域失去焦点时触发的事件称为onblur

当文本域聚焦时触发的事件为onfocus

文本域的文本内容与聚焦时的文本内容不一样,就会触发onchange 

在JavaScript中,文本域不支持的事件包括()__牛客网 (nowcoder.com)


下面哪些关于块内声明函数的用法是正确的?__牛客网 (nowcoder.com)


undefined和null与任何有意义的值比较返回的都是false,但是null与undefined之间互相比较返回的是true。

console.log(null == false); //false
console.log(null == true);//false
console.log(undefined == false);//false
console.log(undefined == true); //false
console.log(undefined == null);//true
console.log(undefined == undefined);//true
console.log(null == null);//true

 以下js表达式返回false的是()_锐明技术笔试题_牛客网 (nowcoder.com)


以上 JavaScript 代码,在浏览器中运行的结果是_4399游戏笔试题_牛客网 (nowcoder.com)


下面哪一个是JavaScript 中array的正确用法?__牛客网 (nowcoder.com)


由于存在变量提升,在if语句执行之前会先使用var声明变量a,并且声明时是在全局作用域下,因此变量a自动成为window对象的属性,故a in window的返回结果为true,使用“!”将条件取反后返回结果为false,所以不会执行if中的赋值语句,a值为undefined 

执行以下代码,输出的a值为()__牛客网 (nowcoder.com)


下列正则表达式中,能匹配到的字符串个数最多的是()__牛客网 (nowcoder.com)


执行完如下程序后,所有能被访问到的变量包括()__牛客网 (nowcoder.com)


以下哪些对象是Javascript内置的可迭代对象?_360公司笔试题_牛客网 (nowcoder.com)


请问以下JS代码的执行结果是什么? function con__牛客网 (nowcoder.com)


 

下面关于 this 工作原理的描述,哪一个是错误的?_盛趣笔试题_牛客网 (nowcoder.com)


逗号表达式只有最后一项是有效的,即对于i<10,j<6; 来说,判断循环是否结束的是 j < 6;而对于 j<6,i<10; 来说,判断循环是否结束的是 i < 10 

var k = 0;
for(var i=0,j=0;i<10,j<6;i++,j++){
  k += i + j;
}
console.log(k)    // 打印结果为 30

var k = 0;
for(var i=0,j=0;j<6,i<10;i++,j++){
  k += i + j;
}
console.log(k)    // 打印结果为 90

 写出程序运行的结果() var k = 0; for(var_360公司笔试题_牛客网 (nowcoder.com)


var foo = {n:1};
(function(foo){            //形参foo同实参foo一样指向同一片内存空间,这个空间里的n的值为1
    var foo;               //优先级低于形参,无效。
    console.log(foo.n);    //输出1
    foo.n = 3;             //形参与实参foo指向的内存空间里的n的值被改为3
    foo = {n:2};           //形参foo指向了新的内存空间,里面n的值为2.
    console.log(foo.n);    //输出新的内存空间的n的值
})(foo);
console.log(foo.n);        //实参foo的指向还是原来的内存空间,里面的n的值为3.

 以上 JavaScript 代码,在浏览器中运行的结果是_4399游戏笔试题_牛客网 (nowcoder.com)


 已知数组arr = [2,20,3,12,9],现在要对数组__牛客网 (nowcoder.com)


1.

1

console.log(1+ "2"+"2");

做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。
因此,这里相当于字符串的合并,即为122.

2.

1

console.log(1+ +"2"+"2");

第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +"2"相当于1+2=3.
然后和后面的字符串“2”相合并,变成了字符串"32".

3.

1

console.log("A"- "B"+"2");

"A"-"B"的运算中,需要先把"A"和"B"用Number函数转换为数值,其结果为NaN,在剪发操作中,如果有一个是NaN,则结果是NaN,因此"A"-"B"结果为NaN。
然后和"2"进行字符串合并,变成了NaN2.

4.

1

console.log("A"- "B"+2);

根据上题所述,"A"-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN。

 如下代码输出的结果是什么:_百度笔试题_牛客网 (nowcoder.com)


获取原生JS的父节点的是()_小米集团笔试题_牛客网 (nowcoder.com)


 执行下列选项的程序,输出结果不是undefined的是()__牛客网 (nowcoder.com)


分析下面javascript代码: func..._爱奇艺笔试题_牛客网 (nowcoder.com)


执行以下程序,下列选项中,说法正确的是() class Do__牛客网 (nowcoder.com)


我们创建一个正则表达式  var RegExp = /^(123)(456)\2\1$/;
这个正则表达式匹配到的字符串就是  123456456123

创建另外第二正则表达式  var RegExp1 = /^(123)(456)\1$/;
这个正则表达式匹配到的字符串是  123456123

创建另外第三正则表达式  var RegExp1 = /^(123)(456)\2$/;
这个正则表达式匹配到的字符串是  123456456  
这个\1  \2......都要和正则表达式集合()一起使用
简单的说就是:
\1表示重复正则第一个圆括号内匹配到的内容  
\2表示重复正则第二个圆括号内匹配到的内容 

A选择中的onBlur表示元素失去焦点时触发。所以A错误。
B选择中的onFocus表示元素获取焦点时触发。所以B错误。
C选择中的onClick=”function compute()”,function关键字不属于对函数的调用,而是对函数的声明。

在 HTML 页面中创建一个按钮,当点击该按钮时调用已定义的__牛客网 (nowcoder.com)


hasOwnProperty: 是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。

isPrototypeOf : 是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。

function* 声明 (function关键字后跟一个星号)定义了一个 生成器函数 ( generator function ) ,它返回一个  Generator   对象。

下列代码hasOwnProperty的作用是?__牛客网 (nowcoder.com)


假设 output 是一个函数,输出一行文本。__牛客网 (nowcoder.com)


JavaScript 中的数字在计算机内存中占多少个Byte__牛客网 (nowcoder.com)


下列哪几项可以创建函数?__牛客网 (nowcoder.com)


在开发中,往往需要从后台调用一些数据在前端显示,如何在前端显_爱奇艺笔试题_牛客网 (nowcoder.com)


下面哪个选项中的对象与浏览列表有关( )_京东笔试题_牛客网 (nowcoder.com)


以下这段JavaScript程序的输出是什么?_搜狗笔试题_牛客网 (nowcoder.com)


 针对以下f函数分别执行f(2)和f()会有怎样的结果? f __牛客网 (nowcoder.com)


        <script>
            var a = 10;
            window.a; 
            console.log(window.a);//10
            let b = 100;
            window.b; 
            console.log(window.b);// undefined
        </script>

 请问以下JS代码最后输出的len值是多少? var len __牛客网 (nowcoder.com)


 如果要打开名为 “window2"的新窗口,可以通过()__牛客网 (nowcoder.com)


A. concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

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

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

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

用户在登陆某个账号时,通常是将账号名和密码分别输入到对应的文_爱奇艺笔试题_牛客网 (nowcoder.com)


这是一个闭包,闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 
这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加油,但是相互之间不影响,因此结果是010 

请问以上程序的输出是_搜狗笔试题_牛客网 (nowcoder.com)

闭包 - JavaScript | MDN (mozilla.org)


object.defineProprty()里面需要传三个参数,第一个是要被操作的对象,第二个是这个对象要被操作的属性和方法,第三个是一个回调函数,在访问这个属性时,会调用get(),比如console.log();而在修改这个属性的时候,会调用set,在最后一行我们修改了obj.name 这个属性,使用会调用set,先打印set接受的值newVal,如何打印以前的值,最后将将newVal的值赋给_name; 

如果修改obj里面的name属性时会发生什么? let ob__牛客网 (nowcoder.com)


let A = function() {}
A.prototype.a = 1; 
//此时 A.prototype = { a: 1 }
 
 
let B = new A(); //此时 B = {}
//在创建B时,已将B._proto_ = A.prototype = { a: 1 }
//即使后面A.prototype重新赋值,将A.prototype开辟了新的空间指向别的对象
//B._proto_并没有改,还是指向{a:1}这个对象
 
 
A.prototype = { //此时 A.prototype = { b: 2, c: 3 }
  b: 2,
  c: 3
}
let C = new A(); //C = {}
A.prototype.d = 4;//此时A.prototype = { b: 2, c: 3, d: 4 }
 
console.log(B.a); //1
console.log(B.b); //undefined
console.log(C.c); //3
console.log(C.d); //4
 
//C.d
//着重区分: A.prototype.d = 4 和 A.prototype 重新赋值 不是一个概念 
//A.prototype重新赋值时,A.prototype已经指向另一个对象了   
//A.prototype.d = 4时,访问的还是同一个A.prototype 对象 

如果         let B = new A();     之后

加一个     A.prototype.b = 999;    

那么        console.log(B.b);    B.b就是999


页面有一个按_字节跳动笔试题_牛客网 (nowcoder.com)



下面这段代码的输出是_用友网络笔试题_牛客网 (nowcoder.com) 


var str = 'acdaecad';
var obj = {};
for (var i = 0;i<str.length;i++){
            if (obj[str.charAt(i)]){ //判断是obj里是否有str里面某个字母的属性
                obj[str.charAt(i)]++;//如果有,给那个属性++
            }
            else {
                obj[str.charAt(i)] = 1;      //如果没有,给obj添加那个属性
        }
        }
var val1;
var val2 = 0;
for (var k in obj) { //for in 循环遍历对象,k是键(也就是对象的属性名) obj就是原对象
            if (obj[k] > val2){  如果obj的属性值大于val2    里面a出现的最多。++次数最多,也就是3
                val2 = obj[k];   //val2等于obj的属性值 
                val1 = k;  //最后将属性名赋予  
            }
}
console.log(val1);//所以最后输出a

执行以下程序,输出结果为() var str = 'acda__牛客网 (nowcoder.com)


 

var str = "stiabsstringapbs";                 //定义字符串
 var obj = {};                                //定义对象
 for (var i = 0; i < str.length; i++) {       //遍历字符串
          var key = str[i];                   //存储字符
               if (!obj[key]) {               //若对象中不存在该key,初始化为1
                   obj[key] = 1;
              } else {                        //若对象中存在该key,则数值加1
                   obj[key]++;
                }
  }                               
/*第一个for循环结束得到每个字符数量的对象,大概下面这鸟样
obj={
    s:4,
    t:2,
    i:2,
    ...
}*/
  var max = -1;                               //初始化最大数量,最大数量字符
  var max_key = "";
  var key;
  for (key in obj) {                          //遍历obj对象,获得字符最大数量及对应字符
           if (max < obj[key]) {
                     max = obj[key];
                     max_key = key;
         }
 }
   alert("max:"+max+" max_key:"+max_key);

 1. var str = "stiabsstringapbs_爱奇艺笔试题_牛客网 (nowcoder.com)


 

当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前_爱奇艺笔试题_牛客网 (nowcoder.com) 


  • (()=>{}).length; 获取方法形参个数,形参为0
  • 1=0001 2=0010  按位与运算,同为1才为1,否则返回0
  • +[] 隐式类型转换,因为[]是对象,所以toPrimitive->valueOf->toString为'',结果就是+''===0
  • reduce对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。a为累计器累计回调的返回值,b为数组的每一项元素,传入初始值0->0-(1)->(-1)-2->(-3)-(-3)->0

以下哪些表达式的值为0?_360笔试题_牛客网 (nowcoder.com)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值