前端小攻略

200 阅读7分钟

1.对web标准的理解

不是某一个标准,是一系列标准的集合。 网页主要分为三部分:结构、表现、行为。
结构:XML和XHTML 表现:css 行为:DOM和ECMAscript
W3C对web提出的规范化要求:
结构要求:(1)标签字母要小写(2)标签要闭合(3)标签不允许随意嵌套
对css和js来说:(1)尽量使用外链css样式表和js脚本(2)尽量少用行内样式(3)语义化标签

2.浏览器内核的差异

浏览器最核心的部分称为引擎,专门负责对html、css、js脚本等进行解释最终渲染到窗口。但是不同的浏览器对文本和脚本的解释是不一样的,这就是要解决的兼容问题。

3.CSS-hack

用于兼容浏览器
CSS 内部hack 语法是这样的 selector{?property:value?;} ,上面代码所示的是在属性名称之前的hack,当然还有这样的
*background-color:green;
属性前面加个“*”这样的写法只会对IE6、7生效,其它版本IE及现代浏览器会忽略这条指令(没有特殊说明,本文所有hack都是指在声明了DOCTYPE的文档的效果)

-background-color:green;
属性前面有个“-”这样的只有IE6识别,还有些在后面的hack

background-color:green!important;
这样在属性值后面添加“!important”的写法只有IE6不能识别,其它版本IE及现代浏览器都可以识别

4.css基础

(1)选择器

标签选择器、类名选择器、ID选择器、后代选择器、群组选择器、交叉选择器
!important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性

(2)盒子模型问题

1.浏览器的默认样式,body标签有8个像素的外间距
*{ margin:0; padding:0; }
2.margin可以设置负值,padding不可以设置负值
3.行内标签不能设置上下外边距,可以设置左右外边距
4.盒子的真实宽高
5.当重复设置同一区域时,显示较大的值
给上边盒子设置下边距,给左边盒子设置右边距
6.margin-top的BUG(同时满足五个条件)
(1)是父元素的第一个子元素
(2)父元素没有内填充
(3)父元素没有边框
(4)父元素没有浮动
(5)子元素没有浮动
bug描述:给子元素设置的margin-top,好像作用在父元素上了。
解决bug的办法:1.用父元素的padding-top代替子元素的margin-topp;2.给父元素加一个overflower:hidden;

(3)浮动

浮动的元素会脱离文档流。
浮动的卡顿:子元素高于其他元素的时候发生卡顿
浮动的bug:父元素不设置高度,子元素设置浮动,浮动的子元素撑不开父元素的高度
解决bug的方法:1.尽量给父元素设置高度 2.给父元素加一个overflow:hidden; 3.最后一个子元素清除浮动 clear:both;

(4)伪元素

没有选中真实的DOM元素
1.选中第一个字
p:first-letter{ color:green; }
2.选中第一行
p:first-line{ color:green; }
3.在元素内部的前面进行插入
.ss:before{ content: ""; display: block; width: 20px; height: 20px; background: blue; }
4.在元素内部的后面进行插入
.ss:after{ content: ""; display: block; width: 20px; height: 20px; background: blue; }

(5)伪类选择器

选中真实的DOM元素
1.child
:nth-child(2)选中第二个元素
2n 偶数 ,2n+1 奇数 ,odd 奇数 ,even 偶数,
:nth-last-child(n)倒数第n个元素
2.type
:first-of-type 这种类型的第一个,会忽视其他类型
:nth-of-type(n) 这种类型的第n个
:last-of-type 这种类型的最后一个
<ul> <span></span> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
ul li:nth-child(2) 选中第一个li
ul li:nth-of-type(2) 选中第二个li,直接忽略span
ul li:first-child 不会选中span,也不会选中li

5.js基础

1.数据类型

根据在内存中存储的位置
(1) 初始数据类型(栈:数据简单、读取快、信息少):
字符串string、数字number、布尔值Boolean、undefined、null(typeof是object)
(2) 复合数据类型 (堆:数据复杂、读取慢、信息多):
object

2.js中==和===区别

简单来说: == 代表相同, ===代表严格相同 这么理解: 当进行双等号比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则愿意为你进行一次类型转换, 转换成相同类型后再进行比较, 而===比较时, 如果类型不同,直接就是false.

3.运算符

(1) 两个字符串进行比较,从首字符开始一个一个向后比较Ascll码的值。若有一个字符可以比较出来大小就不用往后比了。
(2) 数字和字符串进行比较,字符串尝试将自己转换成数字,按数字的规则进行比较。如果转换不成功返回NaN,整个表达式返回false。
(3) 数字和bool值进行比较,true—>1,false—>0;
(4) undefined==unll
(5) rest 特殊运算符 ...(剩余参数)
<1>当用在形参时,...rest中存放剩余的所有元素
<2>是一个数组
<3>没有剩余参数的时候就是一个空数组
<4>当用在形参时,必须放在最后面
<5>当用在实参或者程序中时,表示把数组中的每个元素拿出来
var arr=[1,2,3,4]
function fun(arr,sit,num,...rest){ //...rest表示只有一个元素:rest数组
var arr1=[];
arr1=delete1(arr,sit,num);
if(rest.length>0){
arr1+=add1(arr1,sit,...rest);} //...rest表示有很多个元素:rest中的每一个元素
return arr1;
}

4.数组

定义数组:
1.var arr = new Array();
2.var arr = new Array(3); //3代表数组的长度
3.var arr = new Array.of(4); //表示数组里存了个4

5.函数

定义函数
(1)基本语法
function 函数名(){ 函数体 }
(2)字面量
var fun = function 函数名(){ 函数体 }
(3)面向对象
new Function(参数,参数)
argument(对象)
只能在函数内部调用,用来保存传过来的实参,像数组一样调用。
return
(1)默认值是undefined
(2)返回值可以是任意类型
(3)终值函数,return后面的代码不会执行了
(4)一个函数可以写多个return语句
(5)返回的只是变量的值,而不是变量
作用域
1.概念:变量作用的范围
2.全局作用域
定义在函数外部,不用var声明。
3.局部作用域(某个函数中)
在函数中声明
4.预编译
(1)如果函数中没有另外声明var,那么如果全局中有函数中所需要的变量,就调用全局中的变量。
(2)如果函数中有另外声明的变量,那么就调用函数中的变量。
(3)函数定义最先存储在内存中。
map函数(用于对数组或对象进行处理,并返回处理之后的数组)
let data = [1,2,3]; let newData = data.map(function(ele){ return ele*2})
map和forEach的区别
1.forEach的返回值是undefined,不能使用链式调用。
2.map()返回的是一个新数组,原数组不会变。
3.没有办法终止或跳出forEach()函数的循环,除非抛出异常。
4.但是jQuery中的$.each()规定为每个匹配元素规定运行的函数,可以return false来停止循环。
filter函数(用于筛选符合要求的数据,并返回该数据集合)
let data = [1,2,3,4]; let newData = data.filter(function(ele){ return ele%2==0})//返回偶数