牛客网面试题总结

9月18号

javascript中实现跨域的方式总结

  • ✔jsonp请求;jsonp的原理是利用<script>标签的跨域特性,可以不受限制地从其他域中加载资源,类似的标签还有<img>

  • document.domain;这种方式用在主域名相同子域名不同的跨域访问中(通过iframe设置document.domain可以实现跨域)

  • window.name;window的name属性有个特征:在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

  • window.postMessage;window.postMessages是html5中实现跨域访问的一种新方式,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源

  • ✔ CORS;CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是应该失败

  • Web Sockets;web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。

  • ✔ 接口代理,使用 nginx 或其他接口代理工具。将请求转发到指定接口。

NOSCRIPT标签是做什么用的?

  • ✔NOSCRIPT标签用来定义在脚本未被执行时的替代内容。
  • 也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText。这个元素可以包含能够出现在文档中任何html元素,script元素除外。包含在noscript元素的内容只有在下列情况下才会显示出来

JQuery 获取元素的高度和宽度

  • width() 和 height() 方法 (不包括内边距、边框或外边距亲自试一试

  • innerWidth() 和 innerHeight() 方法(包括内边距亲自试一试

  • outerWidth() 和 outerHeight() 方法(包括内边距、边框和外边距亲自试一试

alert( ( w i n d o w ) . h e i g h t ( ) ) ; / / 浏 览 器 当 前 窗 口 可 视 区 域 高 度 a l e r t ( (window).height()); //浏览器当前窗口可视区域高度 alert( (window).height());//alert((document).height()); //浏览器当前窗口文档的高度
alert( ( d o c u m e n t . b o d y ) . h e i g h t ( ) ) ; / / 浏 览 器 当 前 窗 口 文 档 b o d y 的 高 度 a l e r t ( (document.body).height());//浏览器当前窗口文档body的高度 alert( (document.body).height());//bodyalert((document.body).outerHeight(true));//浏览器当前窗口文档body的总高度 包括border padding margin
alert( ( w i n d o w ) . w i d t h ( ) ) ; / / 浏 览 器 当 前 窗 口 可 视 区 域 宽 度 a l e r t ( (window).width()); //浏览器当前窗口可视区域宽度 alert( (window).width());//alert((document).width());//浏览器当前窗口文档对象宽度
alert( ( d o c u m e n t . b o d y ) . w i d t h ( ) ) ; / / 浏 览 器 当 前 窗 口 文 档 b o d y 的 高 度 a l e r t ( (document.body).width());//浏览器当前窗口文档body的高度 alert( (document.body).width());//bodyalert((document.body).outerWidth(true));//浏览器当前窗口文档body的总宽度 包括border padding margin

JavaScript 的全局函数及属性

  • js的全局属性
    • Infinity、NAN、undefined
  • js的全局函数
    • decodeURI() 解码某个编码的 URI
    • decodeURIcomponent() 解码一个编码的 URI 组件
    • encodeURI() 把字符串编码为 URI
    • encodeURIcomponent() 把字符串编码为 URI 组件
    • escape() 对字符串进行编码
    • unescape() 对由 escape() 编码的字符串进行解码
    • eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行
    • isFinite()
    • isNAN()
    • Number()
    • parseFloat()
    • parseInt()
    • String()

typeof

亲自试一试

this对象

  • 在事件中,this指向触发这个事件的对象, 特殊的是,IE中的attachEvent中的this总是指向全局对象Window

  • 函数调用时,指向window

  • 以方法调用时,指向调用该方法的对象

  • 使用new创建一个对象时,指向该对象

  • call,apply ,bind 可以改变 this指向


9月19号

input属于窗体元素,层级显示比flash、其它元素都高。

请判断这句话的正确与否。 F

  • 在html中,帧元素(frameset)的优先级最高,表单元素比非表单元素的优先级要高

  • 表单元素包括:文本输入框,密码输入框,单选框,复选框,文本输入域,列表框等等;

  • 所有的html元素又可以根据其显示分成两类:有窗口元素以及无窗口元素。有窗口元素总是显示在无窗口元素的前面

    • 有窗口元素包括:select元素,object元素,以及frames元素等等。
    • 无窗口元素:大部分html元素都是无窗口元素。

重绘(repaint)与重排(reflow)

  • 重排一定重绘,重绘不一定重排

  • 重排

    • 页面渲染初始化时;(这个无法避免)
    • 添加或删除可见的DOM 元素
    • 元素尺寸改变时、位置改变时、内容改变时;
  • 重绘

    • 改变 visibility、outline、背景色等属性
  • 重排优化

    • 将多次改变样式属性的操作合并成一次操作,减少DOM访问。
    • 如果要批量添加DOM,可以先让元素脱离文档流,操作完后再带入文档流,这样只会触发一次重排。(fragment元素的应用)
    • 将需要多次重排的元素,position属性设为absolute或fixed,这样此元素就脱离了文档流,它的变化不会影响到其他元素。例如有动画效果的元素就最好设置为绝对定位。
    • 由于display属性为none的元素不在渲染树中,对隐藏的元素操作不会引发其他元素的重排。如果要对一个元素进行复杂的操作时,可以先隐藏它,操作完成后再显示。这样只在隐藏和显示时触发两次重排。
    • 在内存中多次操作节点,完成后再添加到文档中去。例如要异步获取表格数据,渲染到页面。可以先取得数据后在内存中构建整个表格的html片段,再一次性添加到文档中去,而不是循环添加每一行。

补充:

  • visibility:hidden指的是元素不可见但存在,保留空间,不影响结构,故只产生repaint,但不可触发绑定事件
  • opacity=0:指的是元素不可见但存在,保留空间,不影响结构,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的

9月20号

1、关于Javascript中数字的部分知识总结:

​ 1.Javascript中,由于其变量内容不同,变量被分为基本数据类型变量引用数据类型变量。基本类型变量用八字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值,引用类型变量则只保存对对象、数组和函数等引用类型的值的引用(即内存地址)。

  1. JS中的数字是不分类型的,也就是没有byte/int/float/double等的差异。
  2. JavaScript内部,所有数字都是以64位浮点数形式储存(8Byte),即使整数也是如此。

2、以下哪个语句打印出来的结果时false?

  • alert(3==true) // false   3 == 1
    
  • alert(2=="2")  2 == 2
    
  • alert(null == undefined)
    
  • alert(isNaN("true")) 
    

== js会优先选择将字符串转成数字==

isNaN() 函数用于检查其参数是否是非数字值。

如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。

3、判断对象myObj是否存在的写法

  • !obj

  • !window.obj

  • typeof myObj == “undefined”(判断对象是否有定义,已定义未赋值,返回true)

  • myObj == undefined(已定义未赋值。返回true)

  • myObj === undefined (已定义未赋值,返回true)

  • !this.hasOwnProperty(‘myObj’))(判断是否为顶层对象的一个属性)

    myobj == null(注意null与undefined的区别,null指的是已经赋值为null的空对象,即这个对象实际上是有值的,而undefined指的是不存在或没有赋值的对象。) 故这种方法无法判断该对象是否存在

4、什么是 XML

  • XML 指可扩展标记语言EXtensible Markup Language
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

5、XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。

6、哪些方法可以用作javascript异步模式的编程

  • 回调函数

    • 这是异步编程最基本的方法,优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合,流程会很混乱,而且每个任务只能指定一个回调函数。

    • 例:假定有两个函数f1和f2,后者等待前者的执行结果,如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数

    • f1();
      f2();
      function f1(callback){
      setTimeout(function () {
          // f1的任务代码
          callback();
      }, 1000);
      }
      f1(f2);
      
  • 事件监听

    • 任务的执行不取决于代码的顺序,而取决于某个事件是否发生。有利于实现模块化。

    • 例:为f1绑定一个事件,当f1发生done事件,就执行f2。

    • f1.on('done', f2);
      function f1(){
      setTimeout(function () {
          // f1的任务代码
          f1.trigger('done');
      }, 1000);
      }
      
  • 发布/订阅

    • 我们假定,存在一个”信号中心”,某个任务执行完成,就向信号中心”发布”(publish)一个信号,其他任务可以向信号中心”订阅”(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做”发布/订阅模式”(publish-subscribe pattern), 又称”观察者模式”(observer pattern)。这种方法的性质与”事件监听”类似,但是明显优于后者。因为我们可以通过查看”消息中心”,了解存在多少信号、每个信号有多少订阅者,从而监控程序的运行。

    • jQuery.subscribe("done", f2);
      function f1(){
      setTimeout(function () {
          // f1的任务代码
          jQuery.publish("done");
      }, 1000);
      }
      jQuery.unsubscribe("done", f2);
      
  • Promises对象

    • 是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。简单说,它的思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。回调函数变成了链式写法,程序的流程可以看得很清楚,而且有一整套的配套方法,可以实现许多强大的功能。

    • 例:f1的回调函数f2,f1().then(f2);

    • f1().then(f2);
      function f1(){
          var dfd = $.Deferred();
          setTimeout(function () {
              // f1的任务代码
              dfd.resolve();
          }, 500);
          return dfd.promise;
      }
      指定多个回调函数:
      f1().then(f2).then(f3);
      指定发生错误时的回调函数:
      f1().then(f2).fail(f3);
      

7、哪些对象是 JavaScript 内置的可迭代对象

ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。

原生具备 Iterator 接口的数据结构如下。

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象

对象并不是 JavaScript 的内置可迭代对象

8、以下哪些代码执行后i的值为10:

  • let i =1 + {
    valueOf() { return 9; }
    };
    // 10
    
  • let i = 0;
    new Array(10).forEach(() => {
    i++;
    });
    // 0
    
  • let i = parseInt('0xA'); // 10
    
  • let i = 5;
    function a(i) {
    i *= 2;
    }
    a(i); // 5
    

    B选项:输出值为0是因为forEach方法在数组元素为空时会跳过执行回调函数,相当于此选项回调函数并未执行,所以还是输出0。

    ES5:

    forEach(),filter(),reduce(),every(),some() 都会跳过空位

    .map() 会跳过空位,但会保留这个值

    .join(),toString() 会将空位视为 undefined,而 undefeind 和null 会被处理为空字符串

    ES6中都会将空位当作undefined

    D 选项:i是形参,,属于局部变量,不影响全局变量i的值

    A 选项: 如果在需要使用原始值的上下文中使用了对象,就会自动调用valueOf方法.这里重写了默认的valueOf 方法。

    所以相当于 let i = 1+9

    8、isNaN() 和 parseInt()

    • isNaN()
      • isNaN()函数用来判断一个数是否是NaN(只有一个值是NaN或者能被转换为NaN的时候才返回true)
    console.log(isNaN('e'));//true,因为e可以被转换为NaN 
    console.log(isNaN('11'));//false,因为字符串可以被转换为数字,不能被转为NaN 
    console.log(isNaN(null));//false,因为null可以被转换为0,不能被转为NaN 
    console.log(isNaN(NaN));// true,NaN返回true
    
    • parseInt()

      • string字符串只会被解析从第一个字符开始直到不是数字的字符部分

        console.log(parseInt('223'));//223
        console.log(parseInt('22e3'));//22
        
      • 如果字符串中第一个字符就不是数字,那么返回NaN

        console.log(parseInt('e21'));//NaN
        
      • parseInt() 的第二个参数 进制(默认为10进制) 这个参数小于2或者大于36的时候,都会返回NaN

        console.log(parseInt(1,1));//NaN ,因为第二个参数是1表示1进制<2,所以错误
        console.log(parseInt(1,2));
        
        //如果第一个参数前缀使用0x/0X则表示使用16进制
        console.log(parseInt(0x99));//153=16*9+9
        console.log(parseInt(0x99,10));//如果第一个参数使用了0x表示十六进制,那么第二个参数设置了值也无效
        

        看下面的一个小案例

        var arr=[1,2,3,2,5];
        console.log(arr.map(parseInt));//[1, NaN, NaN, 2, NaN]
        // arr.map方法就是对于数组arr里面的每一项都去使用方法里面的函数,最后返回新数组
        // 因为map方***有索引,所以实际上就是 
        
        parseInt(1,0);//1,因为0表示十进制
        
        parseInt(2,1);//1进制<2,所以错啦!
        
        parseInt(3,2);// 2进制,但是3不在0——2范围内(3应该改为11),所以不符合2进制要求
        
        parseInt(2,3);//符合,因为三进制是0-3,而2在范围内
        
        parseInt(5,4);//4进制不包括5,所以NaN
        
        

9月21号

1、JavaScript 对象分为三类: 内置对象 宿主对象 自定义对象

(1)内置对象: Arguments Array Boolean Date Error Function Number String Regexp Math Object

(2)宿主对象:运行环境提供的对象。如Window和Documen,Element,form,image。

(3)自定义对象:开发人员定义的对象。

2、判断输出的结果

console.log(([]) ? true: false); 
console.log(([] == false? true : false)); 
console.log(({} == false)? true : false); 
  • 布尔类型里只有这几参数个返回false,其它都为 true

    Boolean(undefined) // false
    
    Boolean(null) // false 
    
    Boolean(0) // false 
    
    Boolean(NaN) // false 
    
    Boolean('') // false
    
  • 布尔类型与其它任何类型进行比较,布尔类型将会转换为number类型

    [] == false? true : false
    // 等价于
    Number([]) == 0 ? true : false;
    // 等价于
    0 == 0 ? true : false; // true;
    
    ({} == false)? true : false
    // 等价于
    (Number({})) == 0 ? true : false;
    // 等价于
    NaN == 0 ? true : false; // false
    
  • ​ 补充 Number 的转换

    // 数组
    Number([]); // 0
    Number([123]); // 123
    Number([123, 123]); // NaN
    
    // 字符串
    Number("123"); // 123
    Number("A");  // NaN
    Number("123a"); // NaN
    Number("a123"); // NaN
    Number("true"); // NaN
    Number("false"); // NaN
    
    // 布尔值
    Number(true); // 1
    Number(false); // 0
    
    // 对象
    Number({}); // NaN
    Number({a:1}); // NaN
    
    // 其他
    Number(undefined); // NaN
    Number(null); // 0
    Number(Infinity); // Infinity
    Number(-Infinity); // -Infinity
    Number(1/0); // Infinity
    Number(0/1); // 0
    

3、instanceof

5、WEB页面的生命周期


9月22号

1、表单

如何获取下面表单 select域的选择部分的文本?

<form name="a">
    <select name="a" size="1" id=”obj”>
        <option value="a">1</option>
        <option value="b">2</option>
        <option value="c">3</option>
    </select>
</form>
window.onload = function(){
    //首先获得下拉框的节点对象;
    var obj = document.getElementById("obj");
    //1.如何获得当前选中的值?:
    var value = obj.value;
    //2.如何获得该下拉框所有的option的节点对象
    var options = obj.options;
    //注意:得到的options是一个对象数组
    //3.如何获得第几个option的value值?比如我要获取第一option的value,可以这样:
    var value1 =options[0].value;
    //4.如何获得第几个option的文本内容?比如我要获取第一option的文本,可以这样:
    var text1 = options[0].text;
    //5.如何获得当前选中的option的索引?
    var index = obj.selectedIndex;
    //6.如何获得当前选中的option的文本内容?
    //从第2个问题,我们已经获得所有的option的对象数组options了
    //又从第5个问题,我们获取到了当前选中的option的索引值
    //所以我们只要同options[index]下标的方法得到当前选中的option了
    var selectedText =options[index].text;
}

obj.options[obj.selectedIndex].text

下拉菜单中,用户更改表单元素Select中的值时,就会调用( )事件处理程序

onMouseOver
onFocus
onChange
onClick

2、以下哪一条Javascript语句会产生运行错误?

var obj=( ); 语法错误

var obj=[ ];

var obj={ };

var obj=/ /; 创建正则对象

3、常见的请求头和相应头都有什么

  • 请求(request)

    • GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
    • Accept: /(客户端能接收的资源类型)
    • Accept-Language: en-us(客户端接收的语言类型)
    • Connection: Keep-Alive(维护客户端和服务端的连接关系)
    • Host: localhost:8080(连接的目标主机和端口号)
    • Referer: http://localhost/links.asp(告诉服务器我来自于哪里)
    • User-Agent: Mozilla/4.0(客户端版本号的名字)
    • Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
    • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
    • Cookie(客户端暂存服务端的信息)
    • Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)
  • 响应(response)

    • HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
    • Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
    • Server:apache tomcat(服务端的Web服务端名)
    • Content-Encoding: gzip(服务端能够发送压缩编码类型)
    • Content-Length: 80(服务端发送的压缩数据的长度)
    • Content-Language: zh-cn(服务端发送的语言类型)
    • Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
    • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
    • Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
    • Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
    • Transfer-Encoding: chunked(分块传递数据到客户端)
    • Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
    • Expires: -1//3种(服务端禁止客户端缓存页面数据)
    • Cache-Control: no-***(服务端禁止客户端缓存页面数据) ***
    • *** Pragma: no-***(服务端禁止客户端缓存页面数据)
    • Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
    • Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,解决跨域的一种方法

4、Angular 的知识,没有$send.

  • $emit只能向parent controller传递event与data
  • $broadcast只能向child controller传递event与data
  • $on用于接收event与data

5、 触摸事件有哪些

  • touchstart: 手指放到屏幕上时触发
  • touchmove: 手指在屏幕上滑动式触发
  • touchend: 手指离开屏幕时触发
  • touchcancel: 系统取消touch事件的时候触发,这个好像比较少用

每个触摸事件被触发后,会生成一个event对象,event对象里额外包括以下三个触摸列表

touches: 当前屏幕上所有手指的列表

targetTouches: 当前dom元素上手指的列表,尽量使用这个代替touches

changedTouches: 涉及当前事件的手指的列表,尽量使用这个代替touches

6、按照CommonJS规范,在任何模块代码的作用域下内置了以下哪些变量?

module exports require global

浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量。 module exports require global

7、history 对象

8、下列不属于document对象方法的是?

onload ✔

querySelectorAll

children

ajax

  • onload 为 document 对象的属性,而不是方法

    • document上有onload事件,window上也有onload事件,如果给document.onload上加事件处理函数不会执行,但在window.onload上加事件处理函数会执行
  • children是一个只读属性,返回一个节点的子元素,是一个动态更新的 HTMLCollection 类型。不是 document 对象的方法

  • ajax 不是 JavaScript 的规范,它只是一个缩写:Asynchronous JavaScript and XML,意思就是用 JavaScript 执行异步网络请求。在现代浏览器中主要依靠 XmlHttpRequest 对象

9、浏览器版本兼容问题

  • Firefox 不支持 DOM 对象的 outerHTML innerText outerText 属性
  • 在 IE6 IE7 IE8 中,createElement 方法不仅可以通过合法的标签名创建节点对象,还可以通过传入一段合法的 HTML 代码字符串作为参数创建节点对象
  • IE6 IE7 IE8(Q) 中无法通过 “Element.setAttribute(“class”, “AttributeValue”)” 设置元素的 class 属性,而需要使用 “Element.setAttribute(“className”, “AttributeValue”)”
  • IE6 IE7 IE8(Q) 中无法通过诸如 “Element.setAttribute(“onclick”, “alert(‘ok’)”)” 为元素绑定事件

9月23号

1、正则表达式

  • ?出现0次或1次. [0,1]

  • * 出现0次或多次. [0,+∞]

  • + 出现1次或多次 [1,+∞]

2、以下代码执行后,a.x 和 b.x 的结果分别是?

function A(x){
    this.x = x;
}
A.prototype.x = 1;

function B(x){
    this.x = x;
}
B.prototype = new A();

var a = new A(2), b = new B(3);

delete b.x;

a.x // 2

b.x // undefined

delete b.x 删除了 b 中的 x 值,并没有删除掉键 x 故访问时值为 undefined 并不会往原型链找

3、下面哪种方式不能改变作用域链?

  • with
  • while
  • try catch
  • eval

while的话只是在函数局部环境或者全局环境运行,并不会改变作用域链。

while、if等分支结构语句不改变作用域,创建对象、新建函数肯定改变作用域

4、如何阻止IE和各大浏览器默认行为

  • e.preventDefault()

  • e.returnValue = false (IE)

    补充:阻止冒泡:

  • e.stopPropagation()

  • e.cancelBubble = true (IE)

5、事件冒泡

  • 不能冒泡

    abort 音视频终止加载resize 调整窗口大小error 加载失败load已经加载时Unload正在被卸载时
    mouseentermouseleaveblurfocus
  • ​ 可以冒泡

    beforeinputclcikcompositionstartcompositiondatecompositionend
    dblclickfocusinfocusoutinputkeydownkeyup
    mousedownmousemovemouseoutmouseovermouseup
    scrollselectwheel

9月24号

以下代码的输出结果是

var f = function g() {
    return 23;
};
typeof g();

首先在 javaScript 中 function 有两种类型

  • 函数声明

    function g() {
        return 23;
    }
    
  • 函数表达式

    var f = function g() {
       return 23;
    }
    

    这时 g 只是当前函数 f 的 name 属性

回到该题目中

​ typeof g() 此时会报错。因为:当前的函数 g 是没有被保存下来,只是赋值给 f 。直接调用 g() 会报 g is defined

var f = function g() {
    return 23;
};
g(); // g is defined
typeof g(); // g is defined
typeof f(); // number

但如果改成

function g() {
    return 23;
};
var f = g;
typeof g(); // number
typeof f(); // number

以下哪些操作会触发Reflow

alert(obj.className)

alert(obj.offsetHeight)

obj.style.height = "100px”

obj.style.color = "red"

这里只要注意的点是: 访问了 scrollTop、scrollLeft、scrollWidth、offsetTop、offsetLeft、offsetWidth、offsetHeight之类的属性,浏览器为了保证值的正确也会回流取得最新的值

防止用户访问该值后,修改了值


9月25号

1、哪个CSS属性是继承属性

  • 只有颜色,文字,字体间距行高对齐方式,和列表的样式可以继承。
  • 所有元素可继承
    • visibility、cursor
  • 内联元素可继承
    • letter-spacing、word-spacing、white-space、line-height、color、font、font-family、font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction
  • 终端块状元素可继承
    • text-indent、text-align
  • 列表元素可继承
    • list-style、list-style-type、list-style-position、list-style-image

2、哪个 HTML5 元素用于显示已知范围内的标量测量

  • <meter> 标签定义已知范围或分数值内的标量测量。也被称为 gauge(尺度)。

    • 例子:磁盘用量、查询结果的相关性,等等
  • <meter> 标签不应用于指示进度(在进度条中)。如果标记进度条,请使用 <progress>标签

3、什么是SVG?

  • SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
  • SVG 用来定义用于网络的基于矢量的图形
  • SVG 使用 XML 格式定义图形
  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
  • SVG 是万维网联盟的标准
  • SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
  • SVG是HTML下的一个分支

4、input 中 type 的属性值

button定义可点击的按钮(大多与 JavaScript 使用来启动脚本)
checkbox定义复选框
color定义拾色器
date定义日期字段(带有 calendar 控件)
datetime定义日期字段(带有 calendar 和 time 控件)
datetime-local定义日期字段(带有 calendar 和 time 控件)
month定义日期字段的月(带有 calendar 控件)
week定义日期字段的周(带有 calendar 控件)
time定义日期字段的时、分、秒(带有 time 控件)
email定义用于 e-mail 地址的文本字段
file定义输入字段和 “浏览…” 按钮,供文件上传
hidden定义隐藏输入字段
image定义图像作为提交按钮
number定义带有 spinner 控件的数字字段
password定义密码字段 字段中的字符会被遮蔽
radio定义单选按钮
range定义带有 slider 控件的数字字段
reset定义重置按钮。重置按钮会将所有表单字段重置为初始值
search定义用于搜索的文本字段
submit定义提交按钮。提交按钮向服务器发送数据
tel定义用于电话号码的文本字段
text 默认定义单行输入字段,用户可在其中输入文本。默认是 20 个字符
url定义用于 URL 的文本字段

4、哪些是预编译 css 工具

  • less
  • sass
  • stylus
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海面有风

您的鼓励将是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值