css+js+html基础知识总结

一、CSS相关

1、css的盒子模型:IE盒子模型、标准W3C盒子模型;

2、CSS优先级机制:

选择器的优先权:!important>style(内联样式)>[id>class>tag](选择器)

样式的优先级:(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style

3、继承是CSS的一个主要特征,它是依赖于祖先-后代的关系的。继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代。

4、盒模型包括内容(content)、填充(padding)、边界(margin)和边框(border)四个方面的内容;

5、CSS hack:由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。CSS Hack大致有3种表现形式,CSS属性前缀法、选择器前缀法以及IE条件注释法(即HTML头部引用if IE)Hack。

二、JavaScript相关

1、作用域

变量的作用域:全局变量和局部变量;

变量没有在函数内声明或者声明的时候没有带var就是全局变量,拥有全局作用域,window对象的所有属性拥有全局作用域;在代码任何地方都可以访问,函数内部声明并且以var修饰的变量就是局部变量,只能在函数体内使用,函数的参数虽然没有使用var但仍然是局部变量。

2、js闭包

闭包就是能够读取其他函数局部变量的函数,并让这些变量的值始终保持在内存中存在。

3、数据类型

js的基本数据类型:number、string、Boolean、object、undefined;

  1. 1)值类型:数值、布尔值、nullundefined
  2. 2)引用类型:对象、数组、函数。

4、继承

js是通过原型和构造器实现继承的。

  1. // 构造函数
  2. function Person(name, sex) {
  3. this.name = name;
  4. this.sex = sex;
  5. }
  6. // 定义Person的原型,原型中的属性可以被自定义对象引用
  7. Person.prototype = {
  8. getName: function() {
  9. return this.name;
  10. },
  11. getSex: function() {
  12. return this.sex;
  13. }
  14. }

这里我们把函数Person称为构造函数,也就是创建自定义对象的函数。可以看出,JavaScript通过构造函数和原型的方式模拟实现了类的功能。

为了证明prototype模版并不是被拷贝到实例化的对象中,而是一种链接的方式,请看如下代码:

  1. function Person(name, sex) {
  2.     this.name = name;
  3.     this.sex = sex;
  4. }
  5. Person.prototype.age = 20;
  6. var zhang = new Person("ZhangSan", "man");
  7. console.log(zhang.age); //
  8. // 覆盖prototype中的age属性
  9. zhang.age = 19;
  10. console.log(zhang.age); //
  11. delete zhang.age;
  12. // 在删除实例属性age后,此属性值又从prototype中获取
  13. console.log(zhang.age); //

这种在JavaScript内部实现的隐藏的prototype链接,是JavaScript赖以生存的温润土壤, 也是模拟实现继承的基础。

5、原型

每个函数在创建的时候都自动添加了一个prototype属性,这就是函数的原型,原型本身就是一个Object对象,原型本身就是一个Object对象,其实质是对一个对象的引用;

  1. function A() {
  2. this.width = 10;
  3. this.data = [1,2,3];
  4. this.key = "this is A";
  5. }
  6. A._objectNum = 0;//定义A的属性
  7. A.prototype.say = function(){//给A的原型对象添加属性
  8. alert("hello world")
  9. }

6、cookie的属性

在JavaScript里,一个cookie就是一个字符串属性,cookie有六个属性,分别是name,value,expires(过期时间),path(路径),domain(域)和secure(安全);

Cookie对象的属性:
1、Name:获取或设置Cookie的名称。
2、Value:获取或设置Cookie的Value。
3、Expires:获取或设置Cookie的过期的日期和事件。
4、Version:获取或设置Cookie的符合HTTP维护状态的版本。

Cookie对象的方法:
1、Add:增加Cookie变量。
2、Clear:清除Cookie集合内的变量。
3、Get:通过变量名称或索引得到Cookie的变量值。
4、Remove:通过Cookie变量名称或索引删除Cookie对象。

cookie的获取方式:

  1. <script language="JavaScript" type="text/javascript">
  2. <!--
  3. //设置两个cookie
  4. document.cookie="userId=828";
  5. document.cookie="userName=hulk";
  6. //获取cookie字符串
  7. var strCookie=document.cookie;
  8. //将多cookie切割为多个名/值对
  9. var arrCookie=strCookie.split("; ");
  10. var userId;
  11. //遍历cookie数组,处理每个cookie对
  12. for(var i=0;i<arrCookie.length;i++){
  13. var arr=arrCookie[i].split("=");
  14. //找到名称为userId的cookie,并返回它的值
  15. if("userId"==arr[0]){
  16. userId=arr[1];
  17. break;
  18. }
  19. }
  20. alert(userId);
  21. //-->
  22. </script>

7、node.js适应的场景

高并发,聊天,实时消息推送;

8、事件侦听器

写一个通用的事件侦听器函数。

  1. // event(事件)工具集,来源:github.com/markyun
  2. markyun.Event = {
  3. // 页面加载完成后
  4. readyEvent : function(fn) {
  5. if (fn==null) {
  6. fn=document;
  7. }
  8. var oldonload = window.onload;
  9. if (typeof window.onload != 'function') {
  10. window.onload = fn;
  11. } else {
  12. window.onload = function() {
  13. oldonload();
  14. fn();
  15. };
  16. }
  17. },
  18. // 视能力分别使用dom0||dom2||IE方式 来绑定事件
  19. // 参数: 操作的元素,事件名称 ,事件处理程序
  20. addEvent : function(element, type, handler) {
  21. if (element.addEventListener) {
  22. //事件类型、需要执行的函数、是否捕捉
  23. element.addEventListener(type, handler, false);
  24. } else if (element.attachEvent) {
  25. element.attachEvent('on' + type, function() {
  26. handler.call(element);
  27. });
  28. } else {
  29. element['on' + type] = handler;
  30. }
  31. },
  32. // 移除事件
  33. removeEvent : function(element, type, handler) {
  34. if (element.removeEventListener) {
  35. element.removeEventListener(type, handler, false);
  36. } else if (element.datachEvent) {
  37. element.detachEvent('on' + type, handler);
  38. } else {
  39. element['on' + type] = null;
  40. }
  41. },
  42. // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
  43. stopPropagation : function(ev) {
  44. if (ev.stopPropagation) {
  45. ev.stopPropagation();
  46. } else {
  47. ev.cancelBubble = true;
  48. }
  49. },
  50. // 取消事件的默认行为
  51. preventDefault : function(event) {
  52. if (event.preventDefault) {
  53. event.preventDefault();
  54. } else {
  55. event.returnValue = false;
  56. }
  57. },
  58. // 获取事件目标
  59. getTarget : function(event) {
  60. return event.target || event.srcElement;
  61. },
  62. // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
  63. getEvent : function(e) {
  64. var ev = e || window.event;
  65. if (!ev) {
  66. var c = this.getEvent.caller;
  67. while (c) {
  68. ev = c.arguments[0];
  69. if (ev && Event == ev.constructor) {
  70. break;
  71. }
  72. c = c.caller;
  73. }
  74. }
  75. return ev;
  76. }
  77. };

9、内存泄露

javascript具有自动垃圾回收机制,一旦数据不再使用,可以将其设为"null"来释放引用

堆内存存放引用值,栈内存存放固定类型值。“引用”是一个指向对象实际位置的指针。

在这里需注意的是,引用指向的是具体的对象,而不是另一个引用。

循环引用

  一个很简单的例子:一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对象可能会引发内存泄露。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null

闭包

在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。

  1. var a = function() {
  2. var largeStr = new Array(1000000).join('x');
  3. return function() {
  4. return largeStr;
  5. }
  6. }();

DOM泄露

当原有的COM被移除时,子结点引用没有被移除则无法回收。

  1. var select = document.querySelector;
  2. var treeRef = select('#tree');
  3.  
  4. //在COM树中leafRef是treeFre的一个子结点
  5. var leafRef = select('#leaf');
  6. var body = select('body');
  7.  
  8. body.removeChild(treeRef);
  9.  
  10. //#tree不能被回收入,因为treeRef还在
  11. //解决方法:
  12. treeRef = null;
  13.  
  14. //tree还不能被回收,因为叶子结果leafRef还在
  15. leafRef = null;
  16.  
  17. //现在#tree可以被释放了。

Timers计(定)时器泄露

定时器也是常见产生内存泄露的地方:

  1. for (var i = 0; i < 90000; i++) {
  2. var buggyObject = {
  3. callAgain: function() {
  4. var ref = this;
  5. var val = setTimeout(function() {
  6. ref.callAgain();
  7. }, 90000);
  8. }
  9. }
  10.  
  11. buggyObject.callAgain();
  12. //虽然你想回收但是timer还在
  13. buggyObject = null;
  14. }

调试内存

Chrome自带的内存调试工具可以很方便地查看内存使用情况和内存泄露:
在 Timeline -> Memory 点击record即可。

三、HTML

  • Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

    1. 1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器,
    2. 用什么文档类型 规范来解析这个文档。
    3. 2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。
    4. 3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
    5. 4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
  • 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

    1. 1CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,
    2. 比如div默认display属性值为“block”,成为“块级”元素;
    3. span默认display属性值为“inline”,是“行内”元素。
    4. 2)行内元素有:a b span img input select strong(强调的语气)
    5. 块级元素有:div ul ol li dl dt dd h1 h2 h3 h4p
    6. 3)知名的空元素:
    7. <br> <hr> <img> <input> <link> <meta>
    8. 鲜为人知的是:
    9. <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
  • link 和@import 的区别是?

    1. 1link属于XHTML标签,而@importCSS提供的;
    2. 2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
    3. 3import只在IE5以上才能识别,而linkXHTML标签,无兼容问题;
    4. 4link方式的样式的权重 高于@import的权重.
  • 浏览器的内核分别是什么?

    1. * IE浏览器的内核TridentMozillaGeckoChromeBlinkWebKit的分支)、Opera内核原为Presto,现为Blink
  • 常见兼容性问题?

    1. * png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
    2. * 浏览器默认的marginpadding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
    3. * IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
    4. 浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
    5. 这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
    6. 渐进识别的方式,从总体中逐渐排除局部。
    7. 首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
    8. 接着,再次使用“+”将IE8IE7IE6分离开来,这样IE8已经独立识别。
    9. css
    10. .bb{
    11. background-color:#f1ee18;/*所有识别*/
    12. .background-color:#00deff\9; /*IE6、7、8识别*/
    13. +background-color:#a200ff;/*IE6、7识别*/
    14. _background-color:#1e0bd1;/*IE6识别*/
    15. }
    16. * IE下,可以使用获取常规属性的方法来获取自定义属性,
    17. 也可以使用getAttribute()获取自定义属性;
    18. Firefox下,只能使用getAttribute()获取自定义属性.
    19. 解决方法:统一通过getAttribute()获取自定义属性.
    20. * IE下,even对象有x,y属性,但是没有pageX,pageY属性;
    21. Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
    22. * 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
    23. * Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
    24. 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.
    25. 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hoveractive了解决方法是改变CSS属性的排列顺序:
    26. L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
  • html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

    1. * HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
    2. * 绘画 canvas
    3. 用于媒介回放的 video audio 元素
    4. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
    5. sessionStorage 的数据在浏览器关闭后自动删除
    6. 语意化更好的内容元素,比如 articlefooterheadernavsection
    7. 表单控件,calendardatetimeemailurlsearch
    8. 新的技术webworker, websockt, Geolocation
    9. * 移除的元素
    10. 纯表现的元素:basefontbigcenterfont, sstrikettu
    11. 对可用性产生负面影响的元素:frameframesetnoframes
    12. 支持HTML5新标签:
    13. * IE8/IE7/IE6支持通过document.createElement方法产生的标签,
    14. 可以利用这一特性让这些浏览器支持HTML5新标签,
    15. 浏览器支持新标签后,还需要添加标签默认的样式:
    16. * 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
    17. <!--[if lt IE 9]>
    18. <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
    19. <![endif]-->
    20. 如何区分: DOCTYPE声明\新增的结构元素\功能元素
  • 语义化的理解?

    1. 用正确的标签做正确的事情!
    2. html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
    3. 在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。
    4. 搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO
    5. 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
  • HTML5的离线储存?

    1. localStorage 长期存储数据,浏览器关闭后数据不丢失;
    2. sessionStorage 数据在浏览器关闭后自动删除。
  • (写)描述一段语义的html代码吧。

    1. HTML5中新增加的很多标签(如:<article>、<nav>、<header>和<footer>等)
    2. 就是基于语义化设计原则)
    3. < div id="header">
    4. < h1>标题< /h1>
    5. < h2>专注Web前端技术< /h2>
    6. < /div>
  • iframe有那些缺点?

    1. *iframe会阻塞主页面的Onload事件;
    2. *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
    3. 使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
    4. 动态给iframe添加src属性值,这样可以可以绕开以上两个问题。
  • HTML5的form如何关闭自动完成功能?

    1. 给不想要提示的 form 或下某个input 设置为 autocomplete=off
  • 请描述一下 cookies,sessionStorage 和 localStorage 的区别?

    1. cookie在浏览器和服务器间来回传递。 sessionStoragelocalStorage不会
    2. sessionStoragelocalStorage的存储空间更大;
    3. sessionStoragelocalStorage有更多丰富易用的接口;
    4. sessionStoragelocalStorage各自独立的存储空间;
  • 如何实现浏览器内多个标签页之间的通信? (阿里)

    1. 调用localstorgecookies等本地存储方式
  • webSocket如何兼容低浏览器?(阿里)

    1. Adobe Flash Socket ActiveX HTMLFile (IE) 基于 multipart 编码发送 XHR 基于长轮询的 XHR

css+js+html基础知识总结的更多相关文章

  1. 001/Node.js(Mooc)--基础知识

    一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...

  2. CSS的一些基础知识

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>标题&l ...

  3. 【JS】基础知识

    引言 在互联网的演化过程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主. 2005年以后,互联网进入了Web2.0时代,各类似桌面软件的Web应用大 ...

  4. node.js的基础知识

    第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...

  5. HTML,js的基础知识

    HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...

  6. js 的基础知识

    一.弱类型意识 js变量是没有类型的 var  a = 1;  //a 就是一个变量 不要提什么类型 变量可以赋任何类型的值 类型仅仅是值的性质 与变量无关 Js的基本类型 变量未赋值时,其值为und ...

  7. js的基础知识笔记

    目录 一.基本数据类型 二.函数 三.面向对象 一.基本数据类型 1.使用var声明变量.使用;结尾.使用{}表示代码块.使用驼峰式命名 2.变量是弱类型的,即并不严格要求声明变量的类型,一个变量可以 ...

  8. 二、js中基础知识

    该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略.    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...

  9. JS的基础知识

    前言:写前端代码时的各种取值纠结,让我决定我必须要好好学一下js............加油~ $("#tr"+id).remove() 删除某一行,而不用刷新页面 HightCh ...

随机推荐

  1. Redis介绍及实践分享

    1.Redis是什么 1)Redis是REmote DIctionary Server的缩写,是一个key-value存储系统 2)Redis提供了一些丰富的数据结构,包括Strings,Lists, ...

  2. Saltstack系列2:Saltstack远程执行命令

    命令 命令格式: salt '<操作目标>' <方法>[参数] 例: salt 'wx' cmd.run 'free -m' #查看被控主机内存使用情况 常用参数 针对< ...

  3. IE11登陆交行网银崩溃

    1.打开IE11兼容性视图 2.交通银行就填入95559.com.cn 3.重新打开IE11登录网银

  4. Android和WCF通信 - 大数据压缩后传输

    Android和WCF通信 - 大数据压缩后传输 本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html 最近一直在优化项目 ...

  5. 【linux】之安装mysql常用配置

    下载mysql地址 http://dev.mysql.com/downloads/mysql/ 选择下面这个 查看是否存在mysql安装包 rpm -qa|grep -i mysql 删除mysql安 ...

  6. eclipse下编译hadoop源代码(转)

    hadoop是一个分布式存储和分布式计算的框架.在日常使用hadoop时,我们会发现hadoop不能完全满足我们的需要,我们可能需要修改hadoop的源代码并重新编译.打包. 下面将详细描述如何从sv ...

  7. linux下的g++编译器安装

    再debian下直接apt-get install gcc g++就可以了.按照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 查了一下,原来这个包的名字叫 ...

  8. JAVA NIO中selectedKeys返回的键集,对其中的SelectionKey执行操作之后,是否需要在selectedKeys()中对其执行remove 操作

    今天一个东西需要用到java nio的东西.在网上查了一下资料,发现有Apache的Mina,Netty等,感觉JDK中带的NIO有点鸡肋啊.之前看过这部分的内容,但好长一段时间没有用,也就忘得七七八 ...

  9. apache重写规则自动追加查询参数QSA

    看好多大网站上的搜索都是以.html?keyword=手机&page=abc这个样子表现, 如: search_goods.html?q=%BF%D5%C6%F8%BE%BB%BB%AF%C6 ...

  10. 每个程序员都需要学习 JavaScript 的7个理由

    最近在和招聘经理交流现在找一个好的程序员有多难的时候,我渐渐意识到了现在编程语言越来越倾重于JavaScript.Web开发人员尤其如此.所以,如果你是一个程序员,那么你应该去学习JavaScript ...