前端知识点及面试题总结sheting

1、前端性能优化、前端技术架构、调试、前端安全性问题、前端兼容性问题、nodejs、移动端开发、HTML5/CSS3、正则表达式、web前端的瓶颈(兼容性、组件(框架)不够完善等);

2、getElementByTagName返回一个伪数组:HTMLCollection;

3、getElementById只能是document.getElementById,

createElement只能是document.createElement;

4、Nodelist也是一个伪数组;

5、getElementByClassName在IE8不好用;

4、正则表达式的两种方式:a、varreg=/pattern/;

b、varreg=newRegExp('pattern');

注意:第二种方式可以传变量,而第一种方式不行。

5、constructor:构造器(String、Number...):,也可以得到准确的构造函数。

Vara=123;

a.constructor==Number或者typeofa==“number”;

6、elem.setAttribute(name,value);会在dom结构里添加该属性;而elem[“aa”]=‘bb’,则只是存到内存里,用property的方式获取,或者elem.aa获取

7、elem.CurrentStyle,是IE获取样式的方法;

document.defaultView.getComputedStyle(elem,false),标准浏览器下获取样式的方式。

8、Height:元素内容的高度;

Widht:元素内容的宽度;

fullHeight:获取元素完整的高度,包含:获取元素(不论是隐藏还是显示的元素)完整的高度,包含:内容的高度和border-width,padding-top、padding-bottom;

fullWidth:获取元素(不论是隐藏还是显示的元素)完整的宽度,包含:内容的宽度和border-width,padding-right、padding-left;

offsetWidth:包含内容的宽度和border-width、padding-right、padding-left,但是不能得到隐藏元素的宽度;这个属性并不是W3C的标准,但是浏览器对它支持的很好;

offsetHeight:包含内容的高度和border-width、padding-top、padding-bottom,但是不能得到隐藏元素的宽度;

clientWidth:(可视区域的宽度)document.documentElement.clientWidth或者document.body.clientWidth(IE下适用);注意:document.documentElement是获取HTML根元素的;

clientHeight:可视区域(不包含滚动条,但包含padding)的高度;

innerWidth:可视区域的宽度;

outerHeight:???;

windowWidth:可视区域的宽度;

windowHeight:可视区域的高度;

scrollWidth:内容的实际宽度(可能带有滚动条,也会把真个内容的高度计算上);

scrollHeight:内容的实际高度(可能带有滚动条,也会把真个内容的高度计算上);

蓝色代表属性,黑色代表自己封装的方法(wichung-1.0.js:D:\wichung培训资料),以下同上;

9、(display:none;)与(visibility:hidden;position:absolute;)的效果一样,空间都释放了;而单独使用visibility:hidden则只会隐藏,而不会释放空间;

10、left:elem.style.left;

top:elem.style.top;

offsetLeft:相对于已定位的父元素的left(可能会用上offsetParent:已定位的父元素);

offsetTop:;

scrollLeft:带有滚动条时才有意义的一个属性,指的是实际的left;

scrollTop:带有滚动条时才有意义的一个属性,指的是实际的top;

10、pageX属性是非IE的属性,不符合W3C标准,;

clientX属性各种浏览器都适用的;

offsetX是相对于目标元素来说的(IE下)

layerX是相对于目标元素来说的(非IE下);

11、获取亲爹:elem.parentNode;elem.offsetParent:代表最近的已定位的父元素,有可能是亲爹;

12、CoreDOM:;

XMLDOM:;

HTMLDOM:;

13、元素节点(类型:1,没有nodeValue)、属性节点(类型:2,有nodeValue)、文本节点(类型:3,有nodeValue)、注释节点;

14、elem.childNodes会得到元素的所有节点(空格也算);

15、Elem.children(不符合W3C标准,但是各个浏览器支持的很好)会得到元素真正的孩子,不算空格;

16、elem.firstChild(会计算上空格)与elem.firstElementChild(,不会计算上空格,之算上真正的元素IE8及以下不支持);previousSiblings&&previousElementSibling,nextSiblings&&nextElementSibling;

17、jQuery(“#div1”).text()可以获取div1下的文本,包括div下子元素的文本都可以得到;原生的innerText属性在火狐(textContent可以用)不适用,存在兼容性问题;

18、事件:

a)、标准下:addEventListener(‘click’,function(){},false);removeEventListener()为移除事件;

IE下:attachEvent(‘onclick’,function(){}),但是attach下的this不是指定的元素,而是window;detachEvent()为移除事件;

19、所有现代浏览器均支持XMLHttpRequest对象(IE5和IE6使用ActiveXObject)。

XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。所有现代浏览器(IE7+、Firefox、Chrome、Safari以及Opera)均内建XMLHttpRequest对象。

GET方式:

POST方式(以下方式是在提交表单数据时常用的,也可以写成上面get方式的形式):

当readyState发生变化时,则会触发这个事件:

{

//下面则进行对返回的数据data的操作。

}

几种状态:

readyState

存有XMLHttpRequest的状态。从0到4发生变化。

0:请求未初始化

1:服务器连接已建立

2:请求已接收

3:请求处理中

4:请求已完成,且响应已就绪

status

200:"OK"

404:未找到页面

查找常见的状态码(status)?????

20、在alt和title同时设置的时候,alt作为图片的替代文字出现,title是图片的解释文字。

21、Arguments代表的是实参,等于该参数,且可读可写;fn.length等于该函数形参的个数;

22、闭包(closure):从表现来看,是在外部函数内有一个内部函数,且该内部函数调用了外部函数的局部资源,当外部函数执行后,该函数的局部资源不会被垃圾回收机制(GC)回收:

1、For(vari=0;i

2、(function(index){

3、aLi[index].onclick=function(){

4、Alert(index);

};

})(i);

第四行中,index为内部函数(第二行)的局部变量;每次该函数调用(该函数会被调用aLi.length次)完后,都不会释放该函数的局部变量(index);

缺点:内存泄露:

1、当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄露。.....

23、跨域:(带src属性(script、img、link)的都可以加载外部资源,利用这个属性的特点去实现跨域);

{主域与子域之间的跨域:在子域里document.domain=“qq.com(主域)”;}

{不同域之间的跨域(以下也称JSONP(jsonpadding填充),需求:第三方平台):

在a域名下有一个文件现在向b域名(IP:192.168.25.78)请求数据:

在b域名下的test项目下的test.php文件:

$name=$_GET[‘name’];

$sayHello=$name.’,hello’;

$callback=$_GET[‘callback’];

echo$callback.‘(“‘.$sayHello.’”)’;

>

24、异步加载JS,使用defer或者async属性,它会使浏览器在加载时略过(但是是在另一个进程去加载)该文件去加载其他的js文件;一般不能乱用,只有在该脚本计算量大且不着急用时才能用异步加载方式;

25、js中的类

prototype:一个类的原始的对象,通过原型下添加的任何方法,都会被实例化的对象继承;一个类中如果有this.sayHello方法,而且也有classA.prototype.sayHello。则会执行this.sayHello,这有关原型链在本类中找不到该方法,则一层一层网上找;

26、js中的继承

1)对象冒充:

functionclassA(sColor){//varclassA=function(sColo){

this.color=sColor;

this.sayColor=function(){

alert(this.color);

functionclassB(sColor){

1、this.newMethod=classA;/*相当于this.newMethod=function(){

this.color=sColor;//这个时候this是classB,而语法.color相当于给this添加了一个属性,这就相当于给classB添加了一个属性;sayColor方法也是这样添加到classB中了;

;*/

2、this.newMethod(sColor);//调用之后才是真正的完成继承

3、deletethis.newMethod;//这个时候已完成继承,所以newMethod已经没有作用了,就给删了

this.name=name;

上面第一二三行==classA.call(this,sColor);

2)prototype:prototype对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype对象的任何属性和方法都被传递给那个类的所有实例。两种用途:一个是给类添加方法;另一个是继承【

classB.prototype=newClassA();

classB.prototype.constructor=ClassB;//不写这句话则会导致classB实例化的对象的constructor成为classA;

27、call()和apply():只有函数才有这两个方法,与对象冒充等有关

javascript的typeof返回值有以下6种:

1.number(数字);

2.string(字符串);

3.boolean(布尔值);

4.object(对象、数组和null);

5.function(函数);

6.undefined;

名称

复杂度

说明

备注

冒泡排序BubbleSort

O(N*N)

将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮

插入排序

Insertionsort

逐一取出元素,在已经排序的元素序列中从后向前扫描,放到适当的位置

起初,已经排序的元素序列为空

选择排序

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此递归。

快速排序

QuickSort

O(n*log2(n))

先选择中间值,然后把比它小的放在左边,大的放在右边(具体的实现是从两边找,找到一对后交换)。然后对两边分别使用这个过程(递归)。

堆排序HeapSort

利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即子节点的键值或索引总是小于(或者大于)它的父节点。

近似完全二叉树

希尔排序

SHELL

O(n1+£)

0<£<1

选择一个步长(Step),然后按间隔为步长的单元进行排序.递归,步长逐渐变小,直至为1.

箱排序BinSort

O(n)

设置若干个箱子,把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子首尾连接起来(收集)。

分配排序的一种:通过"分配"和"收集"过程来实现排序。

桶排序

BucketSort

桶排序的思想是把[0,1)划分为n个大小相同的子区间,每一子区间是一个桶。

冒泡排序算法:

functionbubbleSort(arr){varn=arr.length;//获取数组的长度,即有n个数在排序vartemp=null;//定义一个临时变量,交换数据用for(vari=0;iarr[j+1]){//如果a[j]>a[j+1]则交换位置temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}returnarr;//返回排好序的数组}

快速排序:

functionquickSort(arr){varlen=arr.length;//获取arr的长度if(len<=1){//如果arr的长度小于等于1则直接返回arrreturnarr;}varpIndex=Math.floor(len/2);//获取基准点的索引下标varpivot=arr.splice(pIndex,1);//用splice方法获取基准点pivot=[arr[pIndex]],此时的arr为去除第pIndex项之后的剩余项;varleft=[];varright=[];for(vari=0;i

插入排序:

functioninsertSort(arr){vartemp=null;//定义一个临时变量保存要插入元素的值for(vari=1;i=0){//如果要插入的元素小于已排好序的元素并且没有到已排好数组的开始位置arr[p+1]=arr[p];//把大于要插入元素(temp)的已排好序元素位置往后挪一位p--;//从后往前遍历已经排好序的元素}arr[p+1]=temp;//把要插入的元素插入到已排好序的数组中,索引位置为p+1}}returnarr;//返回已排好序的数组}

选择排序:

functionselection_sort(unsorted){

for(vari=0;i

varmin=unsorted[i],min_index=i;

for(varj=i;j

if(unsorted[j]

min=unsorted[j];

min_index=j;

if(min_index!=i){

vartemp=unsorted[i];

unsorted[i]=unsorted[min_index];

unsorted[min_index]=temp;

returnunsorted;

希尔排序:

#include#includevoidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidshell(int*a,intd,intlen){inti,j;for(i=d+1;i=i&&j=1){shell(a,d,len);d=d/2;}}

归并排序:

intmerge(intstart,intmid,intend){intnum1[mid-start+1];intnum2[end-mid];inti=start;intj=mid+1;while(i<=mid){num1[i-start]=num[i];i++;}while(j<=end){num2[j-mid-1]=num[j];j++;}i=0;j=0;intk=start;while(i

归并排序:O(n)

排序法

最差情形

稳定度

额外空间

冒泡

O(n2)

稳定

O(1)

n小时较好

交换

不稳定

选择

插入

大部分已排序时较好

基数

O(logRB)

B是真数(0-9),R是基数(个十百)

Shell

O(nlogn)

O(ns)1

s是所选分组

快速

n大时较好

归并

二叉树遍历:

先序遍历:

例如:遍历已知二叉树结果为:A->B->D->G->H->C->E->F

中序遍历:(左大子的左子:从上往下写->左大子的右子:从上往下写->根节点->右大子的左子:从上往下写->右大子的右子:从上往下写)

例如遍历已知二叉树的结果:B->G->D->H->A->E->C->F

后序遍历:

例如遍历已知二叉树的结果:G->H->D->B->E->F->C->A

层次遍历:

从上到下,从左到右遍历二叉树的各个结点(实现时需要借辅助容器);

例如遍历已知二叉树的结果:A->B->C->D->E->F->G->H

29、解决跨域问题:第一题js跨域问题解决办法:1、document.domain+iframe的设置;2、动态创建script;3、利用iframe和location.hash;4、window.name实现的跨域数据传输;5、使用HTML5postMessage;6、利用flash;7、利用window剪贴板

30、说说nodejs的异步I/O是什么?面对负责的业务需求,多次回调的node代码场景,你有什么看法,如何让代码更好阅读和维护?

1.简单来讲,nodejs中没有多线程机制,那么是如何实现高并发访问的呢,正是由于异步I/O,所谓异步I/O是指nodejs可以以非阻塞的访问去执行代码,然后使用回调的方式来继续完成代码完成后续的工作。2.nodejs在复杂的业务情况下,会大量的产生回调的代码,并且一层层嵌套,会相当的复杂,难于维护,所以如果有可能应该尽可能的多封装一些通用好用的api接口,减少应用层开发者的回调函数数量,比如mongoose就是一个好的对nativemongodb的封装。

31、为满足商业项目的开发需要,你要从一堆的开源产品里做技术选型,请问需要考虑哪些因素?

1.最重要的是要有丰富完善的开发文档,如果没有,你会很蛋疼

2.要有较多的成功案例,如果没有,你可能会成为小白鼠

3.要有活跃的社区,如果没有,碰到问题没人帮你,岂不很孤单?

4.要有大公司支持,这样的话以后可能被收购,会有更强大的支持

32、面向PC端和移动端的网页性能优化技术有哪些异同:

三个主要的改善性能的策略是:

减少每个页面需要获取额外资源的HTTP请求数

减少每个请求加载的大小

优化客户端执行的优先级和脚本执行的效率片这样的资源和执行客户端的程序。

优化客户端执行的优先级和脚本执行的效率

由于移动网络通常比桌面机器的网络慢,所以减少请求数和请求加载量是非常

重要的。由于移动端的浏览器解析HTML和执行JavaScript的效率比桌面PC低,

所以优化客户端程序也是非常关键的。另外,移动端浏览器的缓存大小比桌面PC低,所以需要有方法能重复利用本地的缓存资源。

1.浏览器查找域名的IP地址,减少DNS查询

3.服务器“处理”请求,服务器端应尽可能优化来提高处理和响应速度,比如数据库访问

4.服务器发回一个HTML响应,避免返回特别大的数据

5.浏览器开始显示HTML,将影响见面渲染速度的代码,如果加载的js,放在html的结束等

//1.利用alert和console.log函数,优点简单,最简单的环境下也可以使用,缺

//点效率低,不能深度跟踪

//2.利用chromewebdev和firefoxfirebug,优点简单强大

//3.利用webstrom这样的开发工具中的调试工具,优点强大,缺点对工具要

//求较高

//网络答案:

//五种前端开发必备的调试技术。

//Weinre移动调试

//优点:实现pc和手机的socket通信,从而实现实时调试。

//缺点:每次都要在调试的页面引入js,安装麻烦

//DOM断点

//优点:DOM断点是一个Firebug和chromeDevTools提供的功能,当js需要操作打

//了断点的DOM时,会自动暂停,类似debugger调试。

//缺点:Firebug中,DOM断点可以在Script>Breakpoints里面看到

//chromeDevTools中,需要在Elements面板的DOMBreakpoints中看到

//debugger断点

//需要调试js的时候,我们可以给需要调试的地方通过debugger打断点,代码执

//行到断点就会暂停,这时候通过单步调试等方式就可以调试js代码

//native方法hook

//缺点:这种方法不保证在所有浏览器中有效,比如ios的safari隐私模式下,我

//们就不可以修改localStorage方法

//远程映射本地调试

/*

优点:当线上某个js/css出现问题,我们可以用代理的方式,将远程的文件代

理到本地来实现远程映射调试。其实除了这个功能,还可以作为抓包工具,这

在移动端是很重要的。

*/

35、clearfix什么意思?

清除浮动的方式:a、overflow:hidden;

b、clear

c、clearfix

对比:clearfix主要是用在浮动层的父层,而clear主要是用在浮动层与浮动层之间,和浮动层同一级,如果想要撑开父层的高度,clear就要放在最后。

用clear清除浮动

用clearfix清除浮动

36、img属性tppabs代表什么?

解答:是离线浏览器下载完整个网页后,在图片或超级链接标签内加入的标签,以记录该图片或超级链接指向的原始地址。因为这个标签不是合法标签,所以普通浏览器会忽略它。

Canvas

Canvas是一种标签,与其他标签不同的是,它用JavaScript在网页上绘制图像。其背景默认是透明的;

beginPath()与closePath()可以分割线条不同的状态(起点、终点、线条颜色、线条宽度等);可得到多种状态的线条;

画动画的步骤:1、准备画布;2、清空画布(清空上一次的轨迹);3、绘制图形;4、开启定时器并在定时器中调用相对应的API;5、重复2、3;

基本复习:

浏览器底层(原生的)->核心框架(jquery、dojo、YUI等)->框架组件->应用层(根据项目需求开发组件)

浏览器底层的问题:1、js核心语法层面薄弱(不够全面,会借用jQuery框架来补足);2、js原生API不好用(cookie(只有document.cookie)、ajax(基本代码太多,繁杂了)等);3、浏览器兼容性问题(js、css上的);

Less:优点:网站的重构对前端工程师的压力会减低,不过这也形成的缺点,在less的嵌套下,一旦dom结构发生变化,则less也会产生很大的变化;

Css命名冲突的解决:设置命名空间(设定限制(类似于功能_content)、使用派生选择器(父级选择器子选择器));

Js命名冲突:js通过匿名空间(匿名函数)隔开共有私有;

页面处理文件的问题(可以用sea.js(遵循的是CMD规范)或者require.js遵循AMD规范):1、手动处理组件间的依赖关系;2、加载项太多,破坏页面的整洁度(粒度越小(功能越细致越单一),可复用性强,加载的文件就多);

Require.js中要暴露的文件用关键字define,而不需要暴露的文件用require,替代define的位置;

自定义事件:用底层的事件(DOM事件:click、mousedown、focus等;BOM事件:resize、storage等)去模拟自定义事件。自定义事件是基于观察者模式的(observemodel,是一种设计模式),优点:跳出原生事件的限制,提高封装的抽象层级;【需要有自定义事件的原因:底层的事件可能不太满足业务需求(通过盒子的打开和关闭举例:只关心盒子的打开和关闭,但是底层的事件没有能满足这个open和close的事件,所以会需要自定义事件);自定义事件的原理:会有三个方法(注册事件on:会为当前的元素的某一个类型的事件绑定多个事件;取消事件off:去检测在注册事件里是否存在,若存在,则删除;触发事件fire:循环该类型的处理函数,挨个循环执行;);执行和调用过程:主要是什么时候触发:所有自定义的事件都是浏览器根据底层事件来调用的】;举例:

Function类:原生function类的问题(1、所有类继承自Object;2、object提供的帮助太少)

jQuery中继承是用$.extend(obj1,obj2)来实现

正则表达式:两种方式(1、varpattern=/pattern/;2、

Vara=‘string’;

varreg=newRegExp(‘a’+a+’b’);)

正则的执行语法:

reg.test(str);

reg.exec(要匹配的字符串);-->返回一个数组,第一个代表整个字符串,第二个开始代表第一个子正则表达式匹配的结果;主要是用于有子正则的时候;如果没有子正则,则考虑用match();str.match(reg)会返回一个数组,该数组包括每个匹配的结果;str.replace(reg,string|callback);

str.search(reg)->返回该匹配的结果所对应的index与indexOf()方法类似,只是search可以接收正则表达式;

Str.split(string\reg,howmany)->返回一个被string/reg分割的数组;

37、cookie:是指web浏览器存储的少量数据,在javascript中,cookie用于保存状态以及能够为web浏览器提供一种身份识别机制。但是使用cookie不会采用任何加密机制,因此它们是不安全的。cookie默认的有效期是很短暂的;它只能持续在web浏览器的绘画期间,一旦用户关闭浏览器,cookie保存的数据就丢失了。Cookie的有效期和整个浏览器进程的有效期一致;如果想要延长cookie的有效期,可以通过设置max-age属性;且cookie对同目录下的文件都可见;

cookie和session的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:将登陆信息等重要信息存放为SESSION其他信息如果需要保留,可以放在COOKIE中

nodejs

安装nodejs->安装npm(nodepackagemanagement):;.......。。。。。。。

运行node.js文件:进入当前项目的目录,然后运行需运行的文件:nodehello.js就能在控制台输出hello.js里的信息;

res.write('

Node.js

');

res.end('

HelloWorld

');}).listen(3000);

1.客户端浏览器开始从用户向服务器发出请求,服务器响应的将如上的HTML返回给请求的客户端浏览器中。

2.加载从标签开始,并发现标签内有个外部样式文件要加载

3.这时客户端浏览器又向服务器发出一个请求加载css.css文件,服务器响应。

4.此时客户端浏览器继续加载html文件里里的标签,在css.css文件加载完后,同时开始渲染页面。

5.客户端浏览器在里的标签中发现一个标签并且引用了服务器进而的一张名为test.jpg的图片.客户端浏览器又向服务器发出一次请求。而浏览器不会因为此时正在加载标签里的图片而停止等待图片加载完,浏览器继续渲染还未完成的部分。

6.标签里的图片加载完了,则要显示出来,同时图片会占有一定的面积,又会影响到后面的布局,浏览器不得不又回来重新渲染一次这部分。

7.总算把body里的标签加载及渲染完后,浏览器又发现了一段代码:

8.浏览器又立刻向服务器发出请求加载js.js文件,服务器响应。

9.浏览器又在js.js文件中发现了一段代码是让

标签隐藏的代码,此时浏览器又要重新去渲染被隐藏的
部分。

10.最后到浏览器发现了为止。

对于这种来回渲染,内行叫为reflow,reflow几乎是无法避免的,我们不能因为怕会重新渲染而去丢掉一些页面效果。但是reflow是可以优化的,比如图片在css.css样式文件中就定义好图片的高度,这要会减少重新渲染的次数。另外还有一次词叫repaint,叫重绘,repaint如果只是改变如背景颜色或者文字的颜色,repaint的速度要比reflow的速度明显快的多。

百度搜索怎么处理汉字搜索?:我的看法:其实在百度搜索框里,当输入英文字符和中文字符的结果是一样的,只是由于一开始输入的信息字符较少,而且显示在输入框里的并非是中文字符,所以一开始搜索引擎是去庞大的数据索引库(我觉得应该是在排名较前的英文库)里匹配对应输入的字符,当在英文库不能找到时,则试着去搜索排名高的中文索引库的某个字段里查找对应输入的信息,所以能实时的返回可能的结果~

seajs的原理(define(factory)中的factory函数。原理是,当将js文件加载回来后,执行的仅是define(factory)函数,factory则还未执行。执行define时,会扫描factory.toString()方法,得到当前模块依赖的文件,下载完好,再执行factory函数,这样就实现了提前并行加载,但执行时看起来是同步的。)

1.sea.js是怎样解决模块加载(这里说的模块其实就是js文件加载),

2.sea.js是怎样解决模块依赖

3.sea.js是怎样解决命名冲突

1.模块加载

其实,原理很简单,和手动引入js文件是一样的。

就是当调用有加载功能的函数如seajs.use、require、require.async时,

其内部代码会创建一个script标签,把src设置成你要引入的js文件,然后append到DOM文档中进行加载,

当加载完毕后,再把这个script标签移除掉,所以当我们审查元素时看不到有那个

(8)浏览器又立刻向服务器发出请求加载js.js文件,服务器响应。(9)浏览器又在js.js文件中发现了一段代码是让

标签隐藏的代码,此时浏览器又要重新去渲染被隐藏的
部分。(10)最后到浏览器发现了为止。

注意:从上述简单的说了下浏览器加载HTML页面原理后,会明白很多时候页面打开慢的原因。页面中向服务器请求的次数多会影响到打开速度,重新渲染局部的次数量也会影响到页面打开的速度,当然这只是有时候页面打开速度慢一部分原因。对于这种来回渲染,内行叫为reflow,reflow几乎是无法避免的,我们不能因为怕会重新渲染而去丢掉一些页面效果。但是reflow是可以优化的,比如图片在css.css样式文件中就定义好图片的高度,这要会减少重新渲染的次数。另外还有一次词叫repaint,叫重绘,repaint如果只是改变如背景颜色或者文字的颜色,repaint的速度要比reflow的速度明显快的多。

4、盒模型:盒子模型有两种,分别是IE盒子模型和标准W3C盒子模型。

从上图可以看到标准W3C盒子模型的范围包括margin、border、padding、content,并且content部分不包含其他部分。

从上图可以看到IE盒子模型的范围也包括margin、border、padding、content,和标准W3C盒子模型不同的是:IE盒子模型的content部分包含了border和pading。

....

varsBox=$.boxModel"标准W3C":"IE";document.write("您的页面目前支持:"+sBox+"盒子模型");......

7、同步、异步、阻塞与非阻塞:

同步:函数没有执行完不返回,线程被挂起;阻塞:没有收完数据函数不返回,线程也被挂起;异步:函数立即返回,通过事件或是信号通知调用者;非阻塞:函数立即返回,通过select通知调用者。

I/O的阻塞与非阻塞阻塞模式的I/O会造成应用程序等待,直到I/O完成。同时操作系统也支持将I/O操作设置为非阻塞模式,这时应用程序的调用将可能在没有拿到真正数据时就立即返回了,为此应用程序需要多次调用才能确认I/O操作完全完成。

I/O的同步与异步I/O的同步与异步出现在应用程序中。如果做阻塞I/O调用,应用程序等待调用的完成的过程就是一种同步状况。相反,I/O为非阻塞模式时,应用程序则是异步的。

、kqueue;在文件I/O这一块与普通的业务逻辑的回调函数不同在于它不是由我们自己的代码所触发,而是系统调用结束后,由系统触发的。,以在Windows平台下的实现中,启动Node.js时,便创建了一个基于IOCP的事件循环loop,并一直处于执行状态;

8、canvas:canvas元素用于在网页上绘制图形。canvas元素本身是没有绘图能力的。所有的绘制工作必须在JavaScript内部完成;getContext("2d")对象是内建的HTML5对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。(看时钟的代码:file:///D:/wichung培训资料/html5/clock.html)

8、对语义化的理解:分为html标签的语义化和css命名的语义化,几点好处:a、手持移动设备的无障碍阅读(手持移动设备如PDA、智能手机等可能对CSS的解析能力较弱,这时可能就需要更语义的标签来体现一个页面的易读性);b、盲人等一些障碍人士的更好地阅读(屏幕阅读器对不同标签所发出的声音是不同的,使用更语义的标签以能传达不同信息的重要性);c、搜索引擎的友好收录(虽然各大搜索引擎的排名规则不断的再变化,但规则里的正则始终是要匹配标签的,如果能用更语义的标签,蜘蛛爬行能够根据标签的使用来确定上下和各关键字的权重。);d、技术趋势所趋(正如html诞生时的初衷那样,各个标签的本义就是希望能在特定的地方使用合适的标签,而不是去用样式来表现一个不语义的标签。html5新增了更多的语义化的标签);原本用来实现的结构,通过html5的标签我们可以更完美的表现。e、便于团队项目的可持续运作及维护(语义化的命名能够使我们在多人协作一个项目时更加有序和快捷,而不需要去纠结另一位伙伴的CSS命名是什么意思。如果是个人项目,也便于后期其他同事的修改,语义化的命名时一个项目的可读性更高。);

①避免链接无法被搜索引擎爬行,即防止蜘蛛陷阱。(JavaScript链接、flash链接等搜索引擎蜘蛛一般不能跟踪爬行。要引擎蜘蛛能够爬到网站,要求网站要有良好的结构,符合逻辑,并且所有页面可以通过可爬行的普通HTML链接达到);

③URL设计要规范化(URL越短越好;避免太多参数;目录层次尽量少;文件及目录名具描述性;URL中包含关键词)

④建立网站地图。(HTML网站地图sitemap;XML网站地图Sitemap:使用站长工具后台提交网站地图文件;使用robots文件制定网站地图文件位置)

⑤内部链接权重分配。(要想使重点内页获得高权重,最简单方法是首页直接加上几个重点内页的链接,甚至可以在侧栏推荐、促销部分加上全站链接。)

2.页面优化方面

①页面标题,语义化、关键词组合。

描述标签,关键词标签。

③H标签、ALT属性的权重分配。(H标签相当于正文标题,是关键词优化的另一个页面元素,通常认为重要性仅次于页面Title;SEO中H3以下层次权重已经很低了;替换文字,可以提高可访问性,同时今年ALT文字SEO重要程度有所提高。)

④正文中关键词词频,文内锚链接。

⑤精简代码,提高信噪比。(精简HTML代码,使真正的文字内容比例提高,尽量减少HTML格式代码。从某种意义上来说,格式代码对关键词来说都是噪声,精简代码就是提高信噪比。)

13、CSSHack:针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。分类:条件hack(

Keywords:是否(“”)、大于(gt)、大于或等于(gte)、小于(lt)、小于或等于(lte)、非指定版本(!)

Version:IE6......

)、属性级hack(_:

选择IE6及以下。连接线(中划线)(-)亦可使用,为了避免与某些带中划线的属性混淆,所以使用下划线(_)更为合适。

*:

选择IE7及以下。诸如:(+)与(#)之类的均可使用,不过业界对(*)的认知度更高

\9:

选择IE6+

\0:

选择IE8+和Opera

[;property:value;];:

选择webkit核心浏览器(Chrome,Safari)。IE7及以下也能识别。中括号内外的3个分号必须保留,第一个分号前可以是任意规则或任意多个规则

[;color:#f00;];与[color:#f00;color:#f00;];与[margin:0;padding:0;color:#f00;];是等价的。生效的始终是中括号内的最后一条规则,所以通常选用第一种写法最为简洁。

注意:上述Hack均需运行在标准模式下,若在怪异模式下运行,这些Hack将会被不同版本的IE相互识别,导致失效。

)、选择符hack(

selector{sRules}

*html.test{color:#090;}/*ForIE6andearlier*/*+html.test{color:#ff0;}/*ForIE7*/.test:lang(zh-cn){color:#f00;}/*ForIE8+andnotIE*/.test:nth-child(1){color:#0ff;}/*ForIE9+andnotIE*/

);

16、基本兼容问题:

方法:

#test{overflow:hidden;height:1px;font-size:0;line-height:0;}

说明:IE6及更早浏览器之所以无法直接定义较小高度的容器是因为默认会有行高

#test{display:inline;}

#test{min-height:100px;_height:100px;}

input,button{overflow:visible;}

li{vertical-align:top;}

.a{color:#f00;}.main{width:950px;background:#eee;}.content{float:left;width:750px;height:100px;background:#ccc;_margin-right:-3px;}.aside{height:100px;background:#aaa;}content

aside

在IE6及更早浏览器下为.content设置margin-right:-3px;也可以设置.aside为浮动

BUG重现:

.test{zoom:1;overflow:hidden;width:500px;}.box1{float:left;width:100px;}.box2{float:right;width:400px;}

↓这就是多出来的那只猪

运行如上代码,你会发现文字发生了溢出,在IE6下会多出一只“猪”。造成此BUG的原因可能是多重混合的,如浮动,注释,宽高定义等等。并且注释条数越多,溢出的文本也会随之增多。

列举几个解决方法:删除box1和box2之间所有的注释;不设置浮动;调整box1或box2的宽度,比如将box的宽度调整为90px

div{width:300px;height:100px;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='*.png');}a{_position:relative;}

方法1:

p:first-letter{float:left;font-size:40px;font-weight:bold;}p:first-line{color:#090;}

增加空格:在伪对象选择符:first-letter/:first-line与包含规则的花括号"{"间增加空格。

方法2:

p:first-letter{float:left;font-size:40px;font-weight:bold;color:#f00!important;color:#090;}

如上代码,在IE8下color定义都会失效,原因就是因为有color使用了!important规则。鉴于此,请尽量不要在:first-letter/:first-line里使用!important规则。

div{color:#f00!important;color:#000;}

如上代码,IE6及更早浏览器每个li内部的内联元素底部都会产生空白。解决方案是给li内部的内联元素再加上zoom:1

如上代码,IE6及更早浏览器div.nav会被设置了zoom:1的ul给撑开。

列举几个解决方法:设置ul为浮动元素;设置ul为inline元素;设置ul的width

div{overflow:auto;width:260px;height:80px;border:1pxsolid#ddd;}p{position:relative;margin:0;}

如果我是相对定位,我的父元素overflow属性设置为auto|hidden将失效。如果你使用的是IE及更早浏览器,你将可以看到这个BUG

如果我是相对定位,我的父元素overflow属性设置为auto|hidden将失效。如果你使用的是IE及更早浏览器,你将可以看到这个BUG

如上代码,在IE7及更早浏览器下你会看到div的滚动条将无法工作。解决方案是给div也设置相对定位position:relative

-webkit-transform-style:preserve-3d;或-webkit-backface-visibility:hidden;

在Chrome下,使用过渡效果transition时有时会出现页面闪动

17、Css技巧和经验(在standardmode下):

img{display:block;}

img{vertical-align:top;}

方法3:

#test{font-size:0;line-height:0;}

#test为img的父元素

input{vertical-align:middle;}

#test{height:25px;line-height:25px;}

只需设置文本的行高等于容器的高度即可

a:link{color:#03c;}a:visited{color:#666;}a:hover{color:#f30;}a:active{color:#c30;}

按L-V-H-A的顺序设置超链接样式即可,可速记为LoVe(喜欢)HAte(讨厌)

html{scrollbar-3dlight-color:#999;scrollbar-darkshadow-color:#999;scrollbar-highlight-color:#fff;scrollbar-shadow-color:#eee;scrollbar-arrow-color:#000;scrollbar-face-color:#ddd;scrollbar-track-color:#eee;scrollbar-base-color:#ddd;}

将原来设置在body上的滚动条颜色样式定义到html标签选择符上即可

#test{width:150px;white-space:nowrap;}

方法(此方法Firefox5.0尚不支持):

#test{width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

首先需设置将文本强制在一行内显示,然后将溢出的文本通过overflow:hidden截断,并以text-overflow:ellipsis方式将截断的文本显示为省略号。

#test{width:150px;word-wrap:break-word;}

#test{clear:both;}

#test为浮动元素的下一个兄弟元素

#test{display:block;zoom:1;overflow:hidden;}

#test为浮动元素的父元素。zoom:1也可以替换为固定的width或height

#test{zoom:1;}#test:after{display:block;clear:both;visibility:hidden;height:0;content:'';}

#test为浮动元素的父元素

#test{cursor:pointer;}

#test{position:absolute;top:50%;left:50%;width:200px;height:200px;margin:-100px00-100px;}

#test{display:table-cell;*display:block;*position:relative;width:200px;height:200px;text-align:center;vertical-align:middle;}#testp{*position:absolute;*top:50%;*left:50%;margin:0;}#testpimg{*position:relative;*top:-50%;*left:-50%;vertical-align:middle;}

span{display:block;width:200px;height:100px;}

.a{color:#f00;}.b{background:#eee;}.c{background:#ccc;}测试1测试2

多个规则之间使用空格分开,并且只有class能同时使用多个规则,id不可以

html,body{height:100%;margin:0;}#test{height:100%;}

html,body{height:100%;margin:0;}html{_padding:10px;}#test{position:absolute;top:10px;right:10px;bottom:10px;left:10px;_position:static;_height:100%;}

a{outline:none;}

.outer{width:200px;height:200px;background:#000;filter:alpha(opacity=20);opacity:.2;}.inner{width:200px;height:200px;margin-top:-200px;}我是不透明的内容

.outer{width:200px;height:200px;background:rgba(0,0,0,.2);background:#000\9;filter:alpha(opacity=20)\9;}.outer.inner{position:relative\9;}我是不透明的内容

body{text-align:center;}#test2{width:960px;margin:0auto;text-align:left;}

#test{border-collapse:collapse;border:1pxsolid#ddd;}#testth,#testtd{border:1pxsolid#ddd;}姓名JoyDu年龄26

#test{border-spacing:1px;background:#ddd;}#testtr{background:#fff;}姓名JoyDu年龄26

body{line-height:n;}

标准模式下:Elementwidth=width+padding+border怪异模式下:Elementwidth=width

思路1:使用text-indent的负值,将内容移出容器

.test1{width:200px;height:50px;text-indent:-9999px;background:#eeeurl(*.png)no-repeat;}以图换字之内容负缩进法

该方法优点在于结构简洁,不理想的地方:1.由于使用场景不同,负缩进的值可能会不一样,不易抽象成公用样式;2.当该元素为链接时,在非IE下虚线框将变得不完整;3.如果该元素被定义为内联级或者内联块级,不同浏览器下会有较多的差异

思路2:使用display:none或visibility:hidden将内容隐藏;

.test{width:200px;height:50px;background:#eeeurl(*.png)no-repeat;}.testspan{visibility:hidden;/*或者display:none*/}以图换字之内容隐藏法

该方法优点在于兼容性强并且容易抽象成公用样式,缺点在于结构较复杂

思路3:使用padding或者line-height将内容挤出容器之外;

.test{overflow:hidden;width:200px;height:0;padding-top:50px;background:#eeeurl(*.png)no-repeat;}.test{overflow:hidden;width:200px;height:50px;line-height:50;background:#eeeurl(*.jpg)no-repeat;}以图换字之内容排挤法

该方法优点在于结构简洁,缺点在于:1.由于使用场景不同,padding或line-height的值可能会不一样,不易抽象成公用样式;2.要兼容IE5.5及更早浏览器还得hack

思路4:使用超小字体和文本全透明法;

.test{overflow:hidden;width:200px;height:50px;font-size:0;line-height:0;color:rgba(0,0,0,0);background:#eeeurl(*.png)no-repeat;}以图换字之超小字体+文本全透明法

该方法结构简单易用,推荐使用

.box1{margin:10px0;}.box2{margin:20px0;}box1box2

本例中box1的底部margin为10px,box2的顶部margin为20px,但表现在页面上2者之间的间隔为20px,而不是预想中的10+20px=30px,结果是选择2者之间最大的那个margin,我们把这种机制称之为“外边距合并”;外边距合并不仅仅出现在相邻的元素间,父子间同样会出现。

简单列举几点注意事项:外边距合并只出现在块级元素上;浮动元素不会和相邻的元素产生外边距合并;绝对定位元素不会和相邻的元素产生外边距合并;内联块级元素间不会产生外边距合并;根元素间不会不会产生外边距合并(如html与body间);设置了属性overflow且值不为visible的块级元素不会与它的子元素发生外边距合并;

input,textarea{ime-mode:disabled;}

ime-mode为非标准属性,写该文档时只有IE和Firefox支持

现象:

在编写本条目时,除了Opera,在所有浏览器下input标签使用伪对象:before和:after都没有效果,即使Opera的表现也同样令人诧异。大家可以试玩一下。浏览器版本:IE6-IE10,Firefox6.0,Chrome13.0,Safari5.1,Opera11.51

在编写本条目时,除了Firefox,在所有浏览器下伪对象:before和:after无法定义过渡和动画效果。浏览器版本:IE6-IE10,Firefox6.0,Chrome13.0,Safari5.1,Opera11.51。如果这个过渡或动画效果是必须,可以考虑使用真实对象。

18、mediaquery:通过不同的媒介类型和条件定义样式表规则,可以很方便的在不同的设备下实现丰富的界面;如果是大型的网站或项目,我们讲为各类型的移动终端独立编写css样式文件,此时的使用方式如下:

最后说下IE浏览器,因为他不支持mediaQueries的,使用时需要引用一个MediaQueryJavascript解决,如下:

优点:面对不同分辨率设备灵活性强;能够快捷解决多设备显示适应问题;

19:em和px:

关键点:1.IE无法调整那些使用px作为单位的字体大小;2.国外的大部分网站能够调整的原因在于其使用了em作为字体单位;3.Firefox能够调整px和em,但是96%以上的中国网民使用IE浏览器(或内核)。

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

em有如下特点:1.em的值并不是固定的;2.em会继承父级元素的字体大小。

22、定位(4种):

(1)static

默认值.无特殊定位,遵循HTML定位规则.

注意:当position为static时,定义top,left,bottom,right是不起作用的.

(2)absolute

将对象从文档流中拖出,不再占据元素在文档中的正常位置.

使用top,left,bottom,right等属性相对于其最接近的一个有定位设置的父对象进行绝对定位.

注意:a.相对于最接近的父对象;b.有定位设置的父对象.

(3)relative:

对象不可层叠,而且元素占据着元素自身原来的位置.

根据top,left,bottom,right在文档流中进行正常的偏移.

注意:相对偏移,此处的相对,是相对的对象自身.

例如:原来对象的位置是在(100,100),那么偏移之后,是在(100,100)的基础上进行偏移.

(4)fixed:

Fixed是特殊的absolute,它是以body为定位对象,按照浏览器窗口进行定位,即使拖动滚动条,其位置也不会改变;

23、各个浏览器内核:

IE->Trident

Mozilla:Gecko

Chrome:Webkit

Opera:Presto;

24、github常见操作:

gitfetchbranch2//更新信息

gitmergebranch2/master//merge本地信息

gitadd.//添加新文件或者更改新文件

gitremove**//删除文件

gitcommit-m'bywhodowhat'//提交文件到本地

gitpushpush到服务器上

gitpulloriginmaster从服务器上拉取信息

gitremote查看repository上的所有分支

gitbranch-a查看所有分支

gitbranch-r查看远程分支

gitbranch-d***//删除分支

gitbranch***//新建分支

gitcheckout***//切换分支

gitstatus//查看状态

gitlog//查看提交修改记录

touchREADME.mdgitinitgitaddREADME.mdgitcommit-m"firstcommit"gitremoteaddorigingit@github.com:qingjoin/TestProject.gitgitpush-uoriginmaster

gitremoteaddorigingit@github.com:qingjoin/TestProject.gitgitpush-uoriginmaster

25、Bootstrap2与Bootstrap3:

3.更小的文件体积,Bootstrap.min.css的体积减少了40%以上。在OSX系统上:旧的压缩后的Bootstrap.min.css和bootstrap-responsive.min.css是106Kb+17Kb=123Kb。

新的Bootstrap.min.css将响应式栅格融入了进去,也就是不再区分Bootstrap.min.css和bootstrap-responsive.min.css,只有一个bootstrap.min.css体积是67Kb;

4.且有了CDN,速度肯定更快了.

26、js常见兼容:

补充:

if(evt.ctrlKey&&(key==13||key==10)){//同时按下了Ctrl和回车键//dosomething;}

27、原型链:prototype是所有函数都有的一个属性,但是对象是没有这个属性的,它使您有能力向对象添加属性和方法。在每个使用每个对象的属性或方法时,js会按照原型链的顺序查找属性,直到找到。

可以这样说:有一个Person类,p是它的对象;则p的内部原型(_proto_)是Person.prototype;Person的内部原型是Function.prototype;Person.的原型是Person.prototype(所有对象的__proto__都指向其构造器的prototype,仔细理解);

_proto_是对象的内部原型;prototype是构造函数的原型;所有构造器/函数的__proto__都指向Function.prototype;Function.prototype的__proto__是Object.prototype;

所有对象的__proto__都指向其构造器的prototype,但是使用对象直接量方式定义的对象其构造器(constructor)指向的是根构造器Object,使得(

functionPerson(name){

this.name=name

//重写原型

Person.prototype={

getName:function(){}

varp=newPerson('jack')

console.log(p.__proto__===Person.prototype)//true;这个不管怎么样都会相等

console.log(p.__proto__===p.constructor.prototype)//false,因为这个时候p.constructor变成了Object;

);__proto__目前在IE6/7/8/9中都不支持。IE9中可以使用Object.getPrototypeOf(ES5)获取对象的内部原型。

instanceof是一个二元运算符,如:AinstanceofB.其中,A必须是一个合法的JavaScript对象,B必须是一个合法的JavaScript函数(function).

下面的代码用js模拟了new操作:

functionnewObj(Fun,arguments){varo={};if(Fun&&typeofFun==="function"){o.__proto__=Fun.prototype;Fun.apply(o,arguments);returno;}}

28、OSI七层协议:

29、前端安全性问题:

(1)对于有些情况,只单独的进行js的判断,而不在后台进行判断,会给网站带来不安全性,在团购网站上出现过问题;

(2)eval()函数的善用也容易造成安全性问题;

(4)web上有很多资源,有些可读可写,有些只可读。。这样区分也是为了安全性考虑,比如document.cookie就是可读可写;而HTTP请求头的Referer(表示请求资源)只可读;

30、HTTP协议、响应头、请求头:

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态(无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大)的协议。

HTTP请求类型有八种:

OPTIONS-返回服务器针对特定资源所支持的HTTP请求方法。

GET-向特定的资源发出请求。

POST-向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。

DELETE-请求服务器删除Request-URI所标识的资源。

PATCH-用来将局部修改应用于某一资源,添加于规范RFC5789。

主要是GET和POST方式:它们二者的区别是:(1)使用GET请求时,参数在URL中能显示出来;而POST请求则不显示;前者可能存在安全性问题;(2)使用GET请求发送数据量小,POST则发送请求量大;(3)GET请求发送请求后会被缓存,POST则为nevercached;

设置响应头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。

响应头第一行也称为状态行,格式如下:

HTTP-Version空格Status-Code空格Reason-PhraseCRLF

Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:1xx:信息响应类,表示接收到请求并且继续处理2xx:处理成功响应类,表示动作被成功接收、理解和接受3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理4xx:客户端错误,客户请求包含语法错误或者是不能正确执行5xx:服务端错误,服务器不能正确执行一个正确的请求

101

SwitchingProtocols

切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议

200

OK

请求成功。一般用于GET与POST请求

304

NotModified

未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

404

NotFound

服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面

500

InternalServerError

服务器内部错误,无法完成请求

服务器需要传递许多附加信息,这些信息不能全放在状态行里。因此,需要另行定义响应头域,用来描述这些附加信息。响应头域主要描述服务器的信息和Request-URI的信息。

请求头:HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。最常用的请求头有:Cookie:这是最重要的请求头信息之一;Accept-Charset:浏览器可接受的字符集;Host:初始URL中的主机和端口;User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

在服务器端的语法:

$lesscstyle.less

或者保存到一个文件中:$lesscstyle.less>style.css

32、前端MVC:backbone+underscore+jquey+mustache是前端MVC比较经典的组合;

33、

不同类型间的比较,规律如下

类型

规律

其它说明

对象

比较是不是同一个内存地址

字符串

对象先转化为字符串,然后做比较

布尔类型

两边都要先转为数字(false是0,true是1)。是对象类型先隐式调用toString方法,然后再Number()

alert([]==false);

alert([]==0)

alert([1]==1);

alert([1]==true)

alert([2]==true)

数字

对象要转为数字,再进行比较(对象先隐式调用toString方法转化为字符串,然后再把这个字符串轮化为数字,相当于把这个字符串放到Number这个方法中)

布尔

是进行的数字的比较

把字符串转化为数,再比较

把两边都要转化为数字再进行比较

null

undefined

true

null,undefined

和其它类型

null和undefined和其它类型比较都是false(这两个对象没toString方法)

alert(null==false)

alert(null==0)

alert(null=="");;

自身做布尔运算的时候的转换

示例

object

都是true

alert(!![])

number

只是0和NaN是false

alert(!!0);

string

只有空字符串是false(不是空格字符串)

alert(!!"");

function

都是ture

都是false

1、如果+(加号)两边都是数字,则肯定是加法运算

2、如果+两边有boolean、number类型或null值的某一个,则是加法运算,比如:1+true是2,true+true也是2,null+false是0,1+null是1

3、如果加号两边有最少一边是字符串,则是字符串拼按,比如1+”abcd”

4、如果加号两边最少有一边是是对象类型,这个对象先对象它的toString方法,然后再做字符串拼接,比如:(这些涉及到一些对象的原理性的东西,先做简单了解,以后会讲)5+[1,2,3,4]是51,2,3,4比如({}+{})是"[objectObject][objectObject]"

THE END
1.市场网络营销简介及其特点网络营销网络营销市场网络营销,通常被称为数字营销或在线营销,是通过互联网和各种数字工具(如社交媒体、搜索引擎、电子邮件等)进行的营销活动。它包括通过在线渠道推广产品、服务或品牌,以吸引并维持潜在客户的关注,最终推动销售和品牌忠诚度的提升。随着互联网技术的发展和电子商务的兴起,市场网络营销已经成为现代营销中不可或缺的一部分https://www.nser.cn/show/8761795232.html
2.网络营销模式有哪几种?网友(匿名用户)职场问答网络营销有以下十一种营销模式:1、软文营销(软文宣传语进行品牌推广);2、微博营销(在微博平台上进行宣传);3、微信营销(用微信朋友圈、公众号等产品进行推广);4、搜索引擎营销(用搜索引擎广告产品进行推广);5、搜索引擎优化(用搜索引擎自然排名进行推广);6、即时通讯营销(网络客服等以聊天方式推广);7、自媒体营销(https://zq-mobile.zhaopin.com/zpdOutputQuestionForXZH/6950510
3.网络营销的发展二、网络营销的发展趋势 网络营销在不断发展和演变的过程中,呈现出一些明显的趋势: 移动互联网的普及带动了网络营销的发展。随着智能手机的普及,人们可以随时随地上网浏览和购物,企业也需要将宣传和销售的重心向移动端转移,将更多的资源投放到手机应用和移动网站上。 http://www.bangongqq.com/yxcy/55622.html
4.什么是网络营销?什么是网络营销?网络营销是企业整体营销战略的一个组成部分,是为实现企业总体经营目标所进行的,以互联网为基本手段营造网上经营环境的各种活动。网络营销概念的同义词括:网上营销、互联网营销、在线营销等。这些词汇说的都是同一个意思,笼统地说,网络营销就是以互联网为主要手段开展的营销活动。网络营销具有很强的实践https://cq.xuemanfen.cn/xueyuanwenda/3098-61961.html
5.目前成色au999.9是什么意思:黄金纯度解析与市场应用12月05日,林诗栋 3-1 逆转艾利克斯-勒布伦,公主在寺庙里与和尚H最新章节列表公主在寺庙里与和尚H,十大免费网站推广大全-助你轻松实现网络营销成功-溱瀚游戏网,「在教室伦流澡到高潮H作文」奇幻小说章节列表在教室伦流,首都医科大学附属北京安贞医院肝胆外科医生-99健康网,她开始慢迎迎合徐平雪:走向内心平和http://m.ouzhehua.com/v/video/20241205/985171250wDfbEaS.shtml?scm=61048
6.主页广告创意,如何高效利用广告位提升品牌影响力小红书主页有广告创意什么意思 1、在小红书软件中,个性化广告推荐可能会涉及用户隐私的泄露,关闭该功能是一个明智的选择,以下是关闭个性化推荐的步骤:使用华为P30设备,EMUI10系统,小红书v.80版本,打开小红书应用,点击首页底部的“我”图标,点击右上角的设置标志,选择“隐私”选项,找到并点击底部的“个性化选项”,关闭即http://koc.jk393.com/1EBcC613B9c4.html
7.seo是什么意思?做SEO要注意哪些事项做SEO要注意哪些事项 SEO优化是什么意思? SEO(Search Engine Optimization)是指搜索引擎优化,通过对网站进行各种技术和策略的改进,以提高网站的可访问性、可用性和可读性,从而使网站在搜索引擎中排名更高,吸引更多的访问量。 在互联网时代,无论是企业还是个人,都离不开网络营销,而SEO优化就是网络营销中的一项重要https://www.jianshu.com/p/f7b6b68d8a6b
8.黄剑鸿:网络营销常见术语分别什么意思,CPCCPMCTRCVRROI等这些指标对于评估广告效果和优化营销策略至关重要。此外,还介绍了如PPC、CPS、CPL等各种广告计费方式和SEM、SEO、EDM等营销渠道形式,以及DAU、ARPU等效果指标。 摘要由CSDN通过智能技术生成 展开 想要从事互联网营销的朋友,那么有一些常见名词是不可不记,具体有哪些常见名词呢?https://blog.csdn.net/lin3433466/article/details/106905094/
9.抖音上粉丝平台app(抖音平台粉丝是什么意思)互联网抖音粉丝可以在一些社交媒体平台或者网络营销服务网站上购买1 社交媒体平台上的粉丝购买在抖音以及其他社交媒体平台上,有时可以看到一些个人账户声称可以提供抖音粉丝的购买服务这些账户通常会提供不同价格套餐的粉丝关注,以满足不同用户的需求2 网络营销服务网站除了社交媒体平台,网络上还存在。 http://wap.hdlgy.com/post/4401.html
10.校企合作办学是什么意思校企合作办学是什么意思 柴龙 校企合作办学是学校与企业建立的一种合作模式。 校企合作办学是学校与企业建立的一种合作模式,是大中专院校等职业教育院校为谋求自身发展,抓好教育质量,而采取与企业合作的方式,是一种注重培养质量,注重在校学习与企业实践,注重学校与企业资源、信息共享的“双赢”模式。 校企业合作模式https://m.gaokao.cn/gaokaoknowanswar?id=-tE4b4EBE4zROMKNKYf4&fromcoop=bdzd
11.网络营销师工作总结(推荐10篇)网络营销师工作总结 篇1 进入公司已经大半年的时间了,在这段时间里我学到了许多东西,也成长了不少。 一、年度工作情况 1、熟悉了解公司各项 我于20xx年x月中旬进入公司,为了更快更好地融入公司这个团队,为以后的工作打好铺垫,我对公司的各项规章制度进行了全面了解,熟悉了公司的企业文化。通过了解和熟悉,我为能https://m.wenandaquan.com/word/902061.html
12.建站宝盒企业官网搭建外贸企业官网建设获客小程序搭建耐思智慧作为一家互联网应用服务提供商,可为企业和个人提供域名注册、网站建设、云虚拟主机、独立主机、企业邮局、400电话、企业短信、建站宝盒等服务,拥有ICANN和CNNIC双重认证的域名顶级域名注册商,是广东省工信部门重点扶持的ISP企业,并在广州,香港成立了分支机构,https://www.iisp.com/
13.金融市场部工作总结(11篇)我认为,市场部工作应该是分析市场、研究市场、总结市场规律,具体进行市场开发工作。对市场工作则主要进行工作业绩的考核。医院市场部在某种程度上等同于企业的销售部。而作为营销人员应该具备什么样的基本素质呢?形象要端正,市场意思强,沟通能力、应变能力强,能够吃苦,有比较好的团队合作精神等。而从事医疗营销的市场人员https://www.kaoyanmiji.com/wendang/11397912.html
14.外贸实习报告优秀28篇我们有“英伦·超冀设计中心”,成熟的销售和网络营销队伍和。指定为北京服装学院广东地区实习基地。 管理理念: 公司在管理中的主要特征是奉行以人为本的管理理念,注重从人的需求出发,实施以人为本的管理,在对员工进行相关技术知识培训的同时更注重对员工的道德素质培养。使公司形成一个具有高度团队合作精神和信息沟通http://www.yueduku.com/work/sxbaogao/903/903992.html
15.国际深一度“国家或陷入泥潭”:韩国惊险一夜,究竟发生了什么?韩国MBC电视台的网络直播中,可以看见有民众前往国会前面,试图冲撞警方架起的栅栏,高喊反对口号。 随后,三架疑似韩军军方的直升机进入韩国国会大厦,有目击者称,有士兵从直升机上携带枪支空降国会。 此外,韩国戒严司令官宣布,禁止国会、地方议会、政党活动,禁止政治性集会示威,一切媒体出版机构接受戒严司令官管理。 然而,http://m.qkq46.cn/FQZ/moa/sIdYN.html