范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

js基础面试题221240道题目

  221.什么是假值对象?
  参考答案:浏览器在某些特定情况下,在常规 JavaScript 语法基础上自己创建了一些外来值,这些就是"假值对象"。假值对象看起来和 普通对象并无二致(都有属性,等等),但将它们强制类型转换为布尔值时结果为 false 最常见的例子是 document.all,它 是一个类数组对象,包含了页面上的所有元素,由 DOM(而不是 JavaScript 引擎)提供给 JavaScript 程序使用。
  222.~ 操作符的作用?
  参考答案:~ 返回 2 的补码,并且 ~ 会将数字转换为 32 位整数,因此我们可以使用 ~ 来进行取整操作。  ~x 大致等同于 -(x+1)。
  223.解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字,它们之间的区别是什么?
  参考答案:解析允许字符串(如 parseInt() )中含有非数字字符,解析按从左到右的顺序,如果遇到非数字字符就停止。而转换(如 Nu mber ())不允许出现非数字字符,否则会失败并返回 NaN。
  224.+ 操作符什么时候用于字符串的拼接?
  参考答案:根据 ES5 规范 11.6.1 节,如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+ 将进行拼接操作。如果其 中一个操作数是对象(包括数组),则首先对其调用 ToPrimitive 抽象操作,该抽象操作再调用 [[DefaultValue]],以 数字作为上下文。如果不能转换为字符串,则会将其转换为数字类型来进行计算。  简单来说就是,如果 + 的其中一个操作数是字符串(或者通过以上步骤最终得到字符串),则执行字符串拼接,否则执行数字 加法。  那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字。
  225.什么情况下会发生布尔值的隐式强制类型转换?
  参考答案:(1) if (..) 语句中的条件判断表达式。 (2) for ( ..; ..; ..) 语句中的条件判断表达式(第二个)。 (3) while (..) 和 do..while(..) 循环中的条件判断表达式。 (4) ? : 中的条件判断表达式。 (5) 逻辑运算符 ||(逻辑或)和 &&(逻辑与)左边的操作数(作为条件判断表达式)。
  226.|| 和 && 操作符的返回值?
  参考答案:|| 和 && 首先会对第一个操作数执行条件判断,如果其不是布尔值就先进行 ToBoolean 强制类型转换,然后再执行条件 判断。  对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的值,如果为 false 就返回第二个操作数的值。  && 则相反,如果条件判断结果为 true 就返回第二个操作数的值,如果为 false 就返回第一个操作数的值。  || 和 && 返回它们其中一个操作数的值,而非条件判断的结果
  227.Symbol 值的强制类型转换?
  参考答案:ES6 允许从符号到字符串的显式强制类型转换,然而隐式强制类型转换会产生错误。  Symbol 值不能够被强制类型转换为数字(显式和隐式都会产生错误),但可以被强制类型转换为布尔值(显式和隐式结果 都是 true )。
  228.== 操作符的强制类型转换规则?
  参考答案:(1)字符串和数字之间的相等比较,将字符串转换为数字之后再进行比较。  (2)其他类型和布尔类型之间的相等比较,先将布尔值转换为数字后,再应用其他规则进行比较。  (3)null 和 undefined 之间的相等比较,结果为真。其他值和它们进行比较都返回假值。  (4)对象和非对象之间的相等比较,对象先调用 ToPrimitive 抽象操作后,再进行比较。  (5)如果一个操作值为 NaN ,则相等比较返回 false( NaN 本身也不等于 NaN )。  (6)如果两个操作值都是对象,则比较它们是不是指向同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true,否则,返回 false。
  详细资料可以参考: 《JavaScript 字符串间的比较》
  229.如何将字符串转化为数字,例如 "12.3b"?
  参考答案:(1)使用 Number() 方法,前提是所包含的字符串不包含不合法字符。  (2)使用 parseInt() 方法,parseInt() 函数可解析一个字符串,并返回一个整数。还可以设置要解析的数字的基数。当基数的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。  (3)使用 parseFloat() 方法,该函数解析一个字符串参数并返回一个浮点数。  (4)使用 + 操作符的隐式转换,前提是所包含的字符串不包含不合法字符。
  详细资料可以参考: 《详解 JS 中 Number()、parseInt() 和 parseFloat() 的区别》
  230.如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12, 000, 000.11』?
  参考答案:// 方法一 function format(number) {     return number && number.replace(/(?!^)(?=(d{3})+.)/g, ","); } // 方法二 function format1(number) {     return Intl.NumberFormat().format(number) } // 方法三 function format2(number) {     return number.toLocaleString("en") }
  231.常用正则表达式
  参考答案:// (1)匹配 16 进制颜色值 var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;  // (2)匹配日期,如 yyyy-mm-dd 格式 var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;  // (3)匹配 qq 号 var regex = /^[1-9][0-9]{4,10}$/g;  // (4)手机号码正则 var regex = /^1[34578]d{9}$/g;  // (5)用户名正则 var regex = /^[a-zA-Z$][a-zA-Z0-9_$]{4,16}$/;
  详细资料可以参考: 《前端表单验证常用的 15 个 JS 正则表达式》 《JS 常用正则汇总》
  232.生成随机数的各种方法?
  参考答案:
  《JS - 生成随机数的方法汇总(不同范围、类型的随机数)》
  233.如何实现数组的随机排序?
  参考答案:// (1)使用数组 sort 方法对数组元素随机排序,让 Math.random() 出来的数与 0.5 比较,如果大于就返回 1 交换位置,如果小于就返回 -1,不交换位置。  function randomSort(a, b) {     return Math.random() > 0.5 ? -1 : 1; }  //  缺点:每个元素被派到新数组的位置不是随机的,原因是 sort() 方法是依次比较的。  // (2)随机从原数组抽取一个元素,加入到新数组  function randomSort(arr) {     var result = [];      while (arr.length > 0) {         var randomIndex = Math.floor(Math.random() * arr.length);         result.push(arr[randomIndex]);         arr.splice(randomIndex, 1);     }      return result; }  // (3)随机交换数组内的元素(洗牌算法类似)  function randomSort(arr) {     var index,         randomIndex,         temp,         len = arr.length;      for (index = 0; index < len; index++) {         randomIndex = Math.floor(Math.random() * (len - index)) + index;          temp = arr[index];         arr[index] = arr[randomIndex];         arr[randomIndex] = temp;     }      return arr; }  // es6 function randomSort(array) {     let length = array.length;      if (!Array.isArray(array) || length <= 1) return;      for (let index = 0; index < length - 1; index++) {         let randomIndex = Math.floor(Math.random() * (length - index)) + index;          [array[index], array[randomIndex]] = [array[randomIndex], array[index]];     }      return array; }
  详细资料可以参考: 《Fisher and Yates 的原始版》 《javascript 实现数组随机排序?》 《JavaScript 学习笔记:数组随机排序》
  234.javascript 创建对象的几种方式?
  参考答案:我们一般使用字面量的形式直接创建对象,但是这种创建方式对于创建大量相似对象的时候,会产生大量的重复代码。但 js 和一般的面向对象的语言不同,在 ES6 之前它没有类的概念。但是我们可以使用函数来进行模拟,从而产生出可复用的对象 创建方式,我了解到的方式有这么几种:  (1)第一种是工厂模式,工厂模式的主要工作原理是用函数来封装创建对象的细节,从而通过调用函数来达到复用的目的。但是它有一个很大的问题就是创建出来的对象无法和某个类型联系起来,它只是简单的封装了复用代码,而没有建立起对象和类型间的关系。  (2)第二种是构造函数模式。js 中每一个函数都可以作为构造函数,只要一个函数是通过 new 来调用的,那么我们就可以把它称为构造函数。执行构造函数首先会创建一个对象,然后将对象的原型指向构造函数的 prototype 属性,然后将执行上下文中的 this 指向这个对象,最后再执行整个函数,如果返回值不是对象,则返回新建的对象。因为 this 的值指向了新建的对象,因此我们可以使用 this 给对象赋值。构造函数模式相对于工厂模式的优点是,所创建的对象和构造函数建立起了联系,因此我们可以通过原型来识别对象的类型。但是构造函数存在一个缺点就是,造成了不必要的函数对象的创建,因为在 js 中函数也是一个对象,因此如果对象属性中如果包含函数的话,那么每次我们都会新建一个函数对象,浪费了不必要的内存空间,因为函数是所有的实例都可以通用的。  (3)第三种模式是原型模式,因为每一个函数都有一个 prototype 属性,这个属性是一个对象,它包含了通过构造函数创建的所有实例都能共享的属性和方法。因此我们可以使用原型对象来添加公用属性和方法,从而实现代码的复用。这种方式相对于构造函数模式来说,解决了函数对象的复用问题。但是这种模式也存在一些问题,一个是没有办法通过传入参数来初始化值,另一个是如果存在一个引用类型如 Array 这样的值,那么所有的实例将共享一个对象,一个实例对引用类型值的改变会影响所有的实例。  (4)第四种模式是组合使用构造函数模式和原型模式,这是创建自定义类型的最常见方式。因为构造函数模式和原型模式分开使用都存在一些问题,因此我们可以组合使用这两种模式,通过构造函数来初始化对象的属性,通过原型对象来实现函数方法的复用。这种方法很好的解决了两种模式单独使用时的缺点,但是有一点不足的就是,因为使用了两种不同的模式,所以对于代码的封装性不够好。  (5)第五种模式是动态原型模式,这一种模式将原型方法赋值的创建过程移动到了构造函数的内部,通过对属性是否存在的判断,可以实现仅在第一次调用函数时对原型对象赋值一次的效果。这一种方式很好地对上面的混合模式进行了封装。  (6)第六种模式是寄生构造函数模式,这一种模式和工厂模式的实现基本相同,我对这个模式的理解是,它主要是基于一个已有的类型,在实例化时对实例化的对象进行扩展。这样既不用修改原来的构造函数,也达到了扩展对象的目的。它的一个缺点和工厂模式一样,无法实现对象的识别。  嗯我目前了解到的就是这么几种方式。
  详细资料可以参考: 《JavaScript 深入理解之对象创建》
  235.JavaScript 继承的几种实现方式?
  参考答案:我了解的 js 中实现继承的几种方式有:  (1)第一种是以原型链的方式来实现继承,但是这种实现方式存在的缺点是,在包含有引用类型的数据时,会被所有的实例对象所共享,容易造成修改的混乱。还有就是在创建子类型的时候不能向超类型传递参数。  (2)第二种方式是使用借用构造函数的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到。  (3)第三种方式是组合继承,组合继承是将原型链和借用构造函数组合起来使用的一种方式。通过借用构造函数的方式来实现类型的属性的继承,通过将子类型的原型设置为超类型的实例来实现方法的继承。这种方式解决了上面的两种模式单独使用时的问题,但是由于我们是以超类型的实例来作为子类型的原型,所以调用了两次超类的构造函数,造成了子类型的原型中多了很多不必要的属性。  (4)第四种方式是原型式继承,原型式继承的主要思路就是基于已有的对象来创建新的对象,实现的原理是,向函数中传入一个对象,然后返回一个以这个对象为原型的对象。这种继承的思路主要不是为了实现创造一种新的类型,只是对某个对象实现一种简单继承,ES5 中定义的 Object.create() 方法就是原型式继承的实现。缺点与原型链方式相同。  (5)第五种方式是寄生式继承,寄生式继承的思路是创建一个用于封装继承过程的函数,通过传入一个对象,然后复制一个对象的副本,然后对象进行扩展,最后返回这个对象。这个扩展的过程就可以理解是一种继承。这种继承的优点就是对一个简单对象实现继承,如果这个对象不是我们的自定义类型时。缺点是没有办法实现函数的复用。  (6)第六种方式是寄生式组合继承,组合继承的缺点就是使用超类型的实例做为子类型的原型,导致添加了不必要的原型属性。寄生式组合继承的方式是使用超类型的原型的副本来作为子类型的原型,这样就避免了创建不必要的属性。
  详细资料可以参考: 《JavaScript 深入理解之继承》
  236.寄生式组合继承的实现?
  参考答案:function Person(name) {     this.name = name; }  Person.prototype.sayName = function() {     console.log("My name is " + this.name + "."); };  function Student(name, grade) {     Person.call(this, name);     this.grade = grade; }  Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student;  Student.prototype.sayMyGrade = function() {     console.log("My grade is " + this.grade + "."); };
  237.Javascript 的作用域链?
  参考答案:作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和 函数。  作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前 端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是全局对象)始终是作用域链的最后一个对象。  当我们查找一个变量时,如果当前执行环境中没有找到,我们可以沿着作用域链向后查找。  作用域链的创建过程跟执行上下文的建立有关....
  详细资料可以参考: 《JavaScript 深入理解之作用域链》
  238.谈谈 This 对象的理解。
  参考答案:this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象。在实际开发中,this 的指向可以通过四种调用模 式来判断。 1.第一种是函数调用模式,当一个函数不是一个对象的属性时,直接作为函数来调用时,this 指向全局对象。2.第二种是方法调用模式,如果一个函数作为一个对象的方法来调用时,this 指向这个对象。3.第三种是构造器调用模式,如果一个函数用 new 调用时,函数执行前会新创建一个对象,this 指向这个新创建的对象。4.第四种是 apply 、 call 和 bind 调用模式,这三个方法都可以显示的指定调用函数的 this 指向。其中 apply 方法接收两个参数:一个是 this 绑定的对象,一个是参数数组。call 方法接收的参数,第一个是 this 绑定的对象,后面的其余参数是传入函数执行的参数。也就是说,在使用 call() 方法时,传递给函数的参数必须逐个列举出来。bind 方法通过传入一个对象,返回一个 this 绑定了传入对象的新函数。这个函数的 this 指向除了使用 new 时会被改变,其他情况下都不会改变。这四种方式,使用构造器调用模式的优先级最高,然后是 apply 、 call 和 bind 调用模式,然后是方法调用模式,然后 是函数调用模式。
  《JavaScript 深入理解之 this 详解》
  239.eval 是做什么的?
  参考答案:它的功能是把对应的字符串解析成 JS 代码并运行。  应该避免使用 eval,不安全,非常耗性能(2次,一次解析成 js 语句,一次执行)。
  详细资料可以参考: 《eval()》
  240.什么是 DOM 和 BOM?
  参考答案:DOM 指的是文档对象模型,它指的是把文档当做一个对象来对待,这个对象主要定义了处理网页内容的方法和接口。  BOM 指的是浏览器对象模型,它指的是把浏览器当做一个对象来对待,这个对象主要定义了与浏览器进行交互的法和接口。BOM 的核心是 window,而 window 对象具有双重角色,它既是通过 js 访问浏览器窗口的一个接口,又是一个 Global(全局) 对象。这意味着在网页中定义的任何对象,变量和函数,都作为全局对象的一个属性或者方法存在。window 对象含有 locati on 对象、navigator 对象、screen 对象等子对象,并且 DOM 的最根本的对象 document 对象也是 BOM 的 window 对 象的子对象。
  详细资料可以参考: 《DOM, DOCUMENT, BOM, WINDOW 有什么区别?》 《Window 对象》 《DOM 与 BOM 分别是什么,有何关联?》 《JavaScript 学习总结(三)BOM 和 DOM 详解》

OPPOFindX5Pro首销好评如潮颜值高,拍照强,反应快上个月下旬,OPPO推出了年度旗舰OPPOFindX5Pro。凭借着马里亚纳MariSiliconX一体化流线设计新一代骁龙8LTPO2。02K屏等等一系列豪华配置,OPPOFin搞机派电视盒子哪款好?2022电视盒子排名TOP5大家好,欢迎来到搞机派的电子数码产品推荐时间。电视盒子几百块就能让家里老电视机焕然一新,成为了我们的居家必备神器。于是有人就问了,电视盒子哪款好?挑选时应该注意什么问题呢?搞机派综智能家居中的这4款产品,家里有2种以上,证明你已步入品质生活现在的家居生活,已经开始步入智能化时代以后的家居生活,智能家居是一种趋势,你不得不承认,它正在改变你的生活各个方面。智能家居中的产品非常多,而这4款智能家居产品,知道的人不多,使用都2022年了,电视为什么不能当显示器用?2022年电视性能化分水岭2022年,电视产品迎来了一波换血,本次产品变革的契机,来自于新世代游戏机微软Xboxseriesx和索尼PS5两款游戏主机的上市。围绕这两款主机的性能,华为鸿蒙OS用户量突破3亿,3。0系统或在7月发布,新增3项新功能从华为鸿蒙系统在2021年开始支持大部分华为与荣耀系列的手机后,红鸿蒙OS系统的用户量就处于快速的增长阶段,并且到了2022年,华为鸿蒙系统的用户量已经达到了3亿,其中包括2。2亿网易游戏探索人脸识别验证功能,落实未成年网络保护措施南方网讯(记者张霜)近期,网易游戏结合自身在前沿技术领域的积累,针对游戏中的疑似未成年用户,积极探索人脸识别验证功能。在网易游戏内部设立的AI前置干预机制和未成年识别模型的帮助下,如何看待当前(2022年初)这股显卡降价潮?以前就说了,显卡涨价主要是供需出现了严重的失衡,有多离谱?很多商家的显卡还没到就已经被预定了,就是热到这种程度,在这片阴暗的角落金钱流动速度极快所以在过去的一年里显卡价格非常高,去K50系列竟然只是前奏戏,小米大手笔现在才来,人均41万?大家好,我是三月。最近几天时间,如果大家经常去浏览各个平台的科技数码领域的话,可以发现大家谈论最多的手机是红米K50系列。这款手机发布到现在已经有一周时间了,但是热度却是丝毫不减,FindX5Pro首批用户评价陶瓷机身是最漂亮的设计,越看越好看上半年一般都是手机行业最热闹的时刻,各厂商为了销量陆续推出上半年的王牌产品。例如OPPO,前不久就发布了新一代旗舰产品FindX5Pro,该机型也凭借着超高质感的机身以及不俗的综合12256GB跌至2199元,骁龙870LCD屏,vivo上市仅3个月说起KPL比赛专用手机,大家一定想起vivoiQOO品牌,很多网友称是王者荣耀的亲儿子,在很多手机上加入了独立显示芯片,游戏体验和口碑颇受消费者认可和支持。有些iQOO手机并未加入2021全球高端智能手机品牌份额榜公布,苹果持续领先,华为很遗憾哪个国产品牌能够接班华为立足于高端市场?市场数据是最好的证明。2021年全球高端手机市场份额正式公开,苹果才是最大的赢家。还记得有人说,是华为拉高了国产手机的售价。然而,在华为遭遇
强烈推荐一款Python可视化神器!强烈必备!PlotlyExpress入门之路PlotlyExpress是一个新的高级Python可视化库它是Plotly。py的高级封装,它为复杂的图表提供了一个简单的语法。受Seaborn收录上亿份简历的数据公司疑被查实地探访公司被封,空无一人近日,有网友爆料称,创新工场投资的简历大数据公司巧达科技(北京)有限公司(以下简称巧达科技)所有员工被警方带走,后来有员工陆续被放出来的。目前公司被查原因尚无法确定,疑似违规收集个女性手机第一品牌落幕曾一天卖出1000台,如今市场占有率不及1手机的群体不外乎男性和女性,华为小米等手机比较偏向于男性市场,其中男性用户超过65,而OPPOVIVO和魅族则比较偏向于女性,女性用户超过50,不过即使是华为还是小米,目前都已经开大佬的第一张名片,刘强东75分,马化腾200分都不够!随着经济生活的变好,大家的生活也越来越便利,大家对于身边资讯的获取方式也和以前有所区别。现在在网络上,大家随时随地可以获取最新最好玩的咨讯,那么现在在网上又有什么稀奇古怪的事情呢?刚刚,一场非典型苹果发布会,试图颠覆四大行业!苹果上周相当罕见地以一日一消息的方式,简简单单更新了旗下几个硬件产品线,全是为了让外界把今日春季发布会的重点放在服务上,但这种草草了事的做法也引起市场不小骚动,难道苹果开始重视服务又一个100亿英镑超级巨头被拿下,马云沸腾了整个欧洲!NO。1今晚,在地球的另一端,一家来自中国的企业成为了整个欧洲乃至全世界的焦点!刚刚,支付宝宣布正式牵手英国巴克莱银行!巴克莱银行旗下处理英国接近一半的信用卡和借记卡交易的分公司B科技感十足!三星全新带鱼屏显示器发售从早期的普屏,再到如今主流的宽屏显示器。为了追求更加舒适的观感,显示器随着技术水平不断变化着。现在更是出现了许多全区面的带鱼屏显示器,其中又以三星出品的带鱼屏受到更多用户的喜爱。近深圳最吸睛的荣威Ei6,车价16万,车牌却是九五之尊说到荣威,很多人都知道国内不少国产自主企业打造的车型颜值和配置都非常高,而荣威Ei6这款车就是其中一台,拥有非常大气的外观,而且还采用了插电式混合动力,摇号竞价都省去了,车牌还是新华为首款可穿戴智能眼镜发布IT之家3月26日消息除了全新的P30系列新机之外,华为今晚还发布了旗下首款可穿戴智能硬件EYEWEAR,该眼镜是同GentleMonster合作开发。华为EYEWEAR智能硬件采植物工厂正成为中国农业的新形态中国商报中国商网傍晚,家住北京天通苑地区的市民周文娟登录电商网站,点击鼠标,订购了几斤水培蔬菜,次日便有快递员送货上门。我已经连续一个多月买这种水培菜,感觉它非常干净,几乎不用洗,首次!微软实现全自动DNA信息存储,5个字母花了21小时用DNA来存储信息正在离我们越来越近。本周早些时候,微软宣布在概念验证测试中,微软已经演示了第一个全自动DNA数据存储系统。微软在利用DNA来取代数据中心的路途上,也向前迈进了一步