• 这些不能混淆的前端知识!


    HTML类
    1、标准模式(严格模式)与怪异模式(混杂模式)
    相同:
    浏览器对文档的解析模式
    区别:
    (1)标准模式是指浏览器按 W3C 标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式;
    (2)<!DOCTYPE> 声明位于文档的最前面,决定浏览器解析时到底使用标准模式还是怪异模式,DTD 声明定义了标准文档的类型,会使浏览器使用标准模式解析网页,忽略 DTD 声明 , 将使网页进入怪异模式。


    CSS类
    1、overflow:scroll;与overflow:auto;
    相同:
    都用于产生滚动条
    区别:
    参数是scroll时候,必会出现滚动条。
    参数是auto时候,子元素内容大于父元素时出现滚动条。


    2、display:none;与visibility:hidden;
    相同:
    都能隐藏对应的元素,但隐藏的内容都可以用js获取
    区别:
    (1)display:none;会让元素从渲染树中消失,渲染的时候不占据任何空间;visibility:hidden;不会让元素从渲染树中消失,渲染的时候仍然占据空间,只是内容不可见。
    (2)display:none;改变了dom的结构,所以产生了reflow(回流,回流会引起重绘),而visibility:hidden;没有改变dom结构,只产生repaint(重绘)。
    (3)display:none;是非继承属性,子孙节点消失是由于元素从渲染树中消失造成,通过设置display:inline-block|block;均不能让子孙节点显示;visibility:hidden;是继承属性,子孙节点消失是由于继承了hidden,通过设置visibility:visible;,可以让子孙节点显示。
    (4)读屏器不会读取display:none;的元素内容,而会读取visibility:hidden;的元素内容。


    3、border:0;与border:none;
    相同:
    边框不显示
    区别:
    border:0; 被解析为 border-0; 表示边框宽度为0。
    border:none; 被解析为 border-style:none; 表示边框样式无。
    (1)性能差异 
    在标准浏览器中,
    border:0;浏览器对border-width进行渲染,占用内存。
    border:none;浏览器不进行渲染,不占用内存。 
    因此border:0;比border:none;多渲染了一个border-0;也就是说border:none;的性能要比border:0;高。
    (2)浏览器兼容
    IE7不支持border:none; 
    为了少渲染border-0,和不占用内存,这里我们写一个兼容所有浏览器的最优写法:
    border:0 none;前面的0是针对ie6和ie7的兼容,后面的none是针对标准浏览器的。
    tips:请始终把border-style属性声明到border-color属性之前,元素必须在改变颜色之前获得边框。


    4、IE(6)盒子模型与标准盒子模型
    相同:
    都包括 margin、border、padding、content(按照盒模型的图,我理解为这里的content指我们css里设置的width和height,而下面的width和height指内容的默认宽高)
    区别:
    标准盒子模型 = margin + border + padding + content (content = width | height)
    IE盒子模型 = margin + content (content = border + padding + width | height)


    5、伪元素与伪类
    相同:
    都用于给某些选择器添加特殊的效果
    区别:
    伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到,这也是为什么他们一个称为伪类,一个称为伪元素的原因。
    下面罗列写常见的伪类与伪元素——
    伪类种类:
    伪类
    伪元素种类:
    伪元素
    tips:
    CSS3要求对伪元素使用两个冒号以便与伪类进行区别。但因为兼容性的问题,所以现在大部分还是统一的单冒号,但是抛开兼容性的问题,我们在书写时应该尽可能养成好习惯,区分两者。


    JS类
    1、obj.offsetHeight与obj.style.height $(obj).height()与$(obj).css('height')
    相同:
    都可以获取obj的高度
    区别:
    (1)obj.offsetHeight可以获取外部、内嵌和内联中定义的高,而obj.style.height只能获取内联中定义的高;
    (2)obj.offsetHeight返回的是一个数值,而obj.style.height返回的是一个字符串,单位是“px”;
    (3)obj.offsetHeight是只读,而obj.style.height是可读写;
    (4)如果没有为元素设置高度,obj.offsetHeight会根据内容获取高度值,而obj.style.height会返回undefind或 (空字符串);
    (5)$(obj).height()返回的是一个数值,而$(obj).css('height')返回的是一个字符串,单位是“px”。
    tips:
    与其他三个$(obj).height()、$(obj).css('height')、obj.style.height不同的是,obj.offsetHeight的高度就是height+padding,其他则不把padding计入高度。

    2、call()与apply()
    相同:
    call与aplly都属于Function.prototype的一个方法,每个function实例都有call、apply属性,call()、apply()可改变函数执行环境,从而改变this指向
    区别:
    两者传递的参数不同——
    apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,即func.apply(func1,[var1,var2,var3])。
    call传入的则是直接的参数列表,即func.call(func1,var1,var2,var3)。 call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

    3、undefined与null
    相同:
    都表示“无”,都为false
    区别:
    (1) undefined是一个表示"无"的原始值,转为数值时为NaN,null是一个表示"无"的对象,转为数值时为0;
    (2) 当声明的变量还未被初始化时,变量的默认值为undefined,null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象;
    undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
    1. 变量被声明了,但没有赋值时,就等于 undefined
    2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined
    3. 对象没有赋值的属性,该属性的值为 undefined
    4. 函数没有返回值时,默认返回 undefined
    null表示“没有对象”,即该处不应该有值。典型用法是:
    1. 作为函数的参数,表示该函数的参数不是对象
    2. 作为对象原型链的终点

    4、this与$(this)
    相同:
    一般情况下,this指向(就近)调用对象(除了call()、apply()等会转向,查阅了网上各种讨论,感觉实际上更复杂,暂且这么理解了。。。)
    区别:
    alert(this); 弹出来的是[object HTMLXXXElement] (XXX表示元素名)=>this表示的上下文对象是一个html的DOM对象,可以调用对象所拥有的属性;
    alert($(this)); 弹出的结果是[object Object ] =>$(this)表示一个jquery的上下文对象,可以调用jquery的方法和属性值。
    例如,当获取文本框值时,this.value;或者$(this).val();

  • 相关阅读:
    关于Python虚拟环境与包管理你应该知道的事
    你是否真的了解全局解析锁(GIL)
    谈谈装饰器的实现原理
    快速了解Python并发编程的工程实现(下)
    快速了解Python并发编程的工程实现(上)
    简单了解一下事件循环(Event Loop)
    为何你还不懂得如何使用Python协程
    一文搞懂Python可迭代、迭代器和生成器的概念
    源码分析Retrofit请求流程
    一份程序猿单词列表(updating)
  • 原文地址:https://www.cnblogs.com/donghb/p/7152489.html
Copyright © 2020-2023  润新知