&src/href
<!--href 用于标示资源和文档关系,src 用于替换标签内容-->
<img src="xxx.jpg"/>
<script type="text/javascript" src="xxx.js"></script>
<a href="http://www.baidu.com">百度</a>
<link rel="stylesheet" type="text/css" href="/css/admin.css?id=20170225-2">
为什么当初就决定外部样式表用link href来链接,而不是用style src来载入,可能是因为第一批互联网人认为样式表更符合外部链接资源的特征,它更接近附属的资源,而不是内嵌的内容。比如考虑alternate stylesheets,在同一时间只需要链接一组样式表,而不是载入所有。当然你可以简单的归结为历史遗留(也就是当初某个浏览器开发者的一个偶然决定导致)。这是一个扯淡的问题,制作标准的人不是中国人,是老外;
&缓存:
css:行内写,每一个标签都需要重复写N多代码,这当然是不明智的;
css:嵌入式,相比行内,容易维护,但是不能缓存
css:外链式,相比嵌入式,不仅容易维护,而且还可以缓存;
缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。
为了适用不同的版本,前端开发的时候,一般会有两个思路:
&优雅降级,渐进增强;
从noscript标签引深出的两种编程思想(优雅降低,渐进增强);在一些页面不支持javascript或者javascript被禁用的时候;script标签内的内容是失效的,这个时候会显示noscript;
优雅降低,就是按照支持度最高的浏览器标准来写代码,一般是以chrome为准,对于技术支持较旧的浏览器,只要不影响使用都可以不处理(比如圆角效果border-radius在低版本IE中是没有圆角效果的,但却并不影响正常阅读,那就不管了),如果有功能方面在低版本无法正常,就做低版本的兼容,比如兼容到IE8/IE6;我自己走的路线是优雅降级;
渐进增强,是以技术支持最低的浏览器为准,假设以IE6为准(如果兼容到IE8,就以IE8为准),写的代码在IE6/8中没问题后,在补充一些高级浏览器支持的效果;
广义来说,其实要定义一个基准线,在此之上的增强叫做渐进增强,在此之下的兼容叫优雅降级。这个基准线对于我,是允许使用javascript、cookie和css的IE8浏览器。
不过狭义而言,渐进增强一般说的是使用CSS3技术,在不影响老浏览器的正常显示与使用情形下来增强体验,而优雅降级则是体现html标签的语义,以便在js/css的加载失败/被禁用时,也不影响用户的相应功能。
在写CSS3的时候,推荐渐进增强;
在写JS的时候,推荐优雅降级;
/*错误(顺序)*/:
border-radius: 30px 10px;
-webkit-border-radius: 30px 10px;
/*正确(顺序)*/:
-webkit-border-radius: 30px 10px;
border-radius: 30px 10px;
o webkit moz ms 分别对应不同的内核;
-moz-对应 Firefox,
-webkit-对应 Safari and Chrome
-ms- 对应IE
-o- for Opera(记忆中,在一篇国外的文档上看到,欧朋是没有明确用 -o 这个前缀的,把他写上是为了向后兼容,适应未来;现在一时翻不到那篇文章了,感兴趣的可以多了解下)
&Javascript的文档模式
分为普通模式和严格模式,正常的都是普通模式,严格模式是解决javascript本身的语法问题;
*消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
*消除代码运行的一些不安全之处,保证代码运行的安全;
*提高编译器效率,增加运行速度;
*为未来新版本的Javascript做好铺垫。
进入严格模式的方式,加入"use strict";字符串就可以了;在js文件全局放,就是全部严格模式;在function内放,就是当前的方法是严格模式;一般我们都是用普通模式;现在的插件类库框架,一般都会基于严格模式下开发以确保程序的稳健;
&ES6
ECMAScript 是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言,解决了一些ES5中代码不严谨的规则;
但是遗憾的是现在即时你写ES6,也需要babel之类的转码器转成ES5,否则浏览器会报错;
要学习Javascript,ES5是必须会的,如果ES5的基础打的好,ES6一个礼拜就熟练入手了,因为他是ES6是基于ES5的改变和优化,你知道其中的原理后,很容易过渡,现在浏览器也没有全面支持,你有大把的时间研究ES5,ES5才是根基,等ES6,ES7全面普及了,笔记里会总结ES6,但是正常的演示代码基于ES5;
typeof(null) 输出的是什么==>object
typeof typeof(null)===>string
[JavaScript脚本放在哪里]:http://www.cnblogs.com/ddyq/archive/2012/03/06/2382816.html
[javascript写到
里面,写到里面,写到下面,这三种有什么区别?] : https://zhidao.baidu.com/question/303653753295755124.html[标签中href="javascript:;"]:http://blog.csdn.net/u013720328/article/details/50803076
数据类型
ECMAScript中有5种简单的数据类型,也称为基本数据类型;Undefined、Null、Boolean、Number、String。
一种复杂的数据类型,Object;(typeof检测还有一种特殊的Funtion);
object本质是由一组无序的键值对组成的;
从技术的角度上讲,函数在ECMAScript中是对象,不是一种数据类型,属于对象,在就是里万物皆对象的,但是,函数也确实有一些特殊的属性,因此通过typeof操作符来区分也是有必要的;
typeof 运算符总是会返回一个字符串:
typeof检测任何数据,返回的都是一个字符串,两次和两次以上的连续typeof结果肯定都是string;
字符串一旦被创建,其值是不能改变的,若要改变必须销毁原有字符串,然后用另一个包含新值的字符串填充改变量;
toString()和String() ,Eval()
toString()
把别的类型数据,转为字符串
适用类型
Number/Boolean/String/Object
参数:number类型的数值基数;一般不需要写,仅作了解,
String()
null和undefined没有toString方法,所以转换的时候用String()函数;
var testNull=null;
console.log(typeof testNull);//object
//var testString2=testNull.toString();
//Uncaught TypeError:Cannot read property 'toString' of null
var testString3=String(testNull);
console.log(typeof testString3);//string
Eval()
计算字符串表达式的值并以数值形式返回;
//eval
var evalVal="1+2+5+8+10";
console.log(typeof evalVal);//string
var evalComputed=eval(evalVal);
console.log(evalComputed,typeof evalComputed);//26 "number"
如果把某个值转化为字符串,可以有一个快捷的方式,就是把它与一个字符串""相加就可以了;
//+""用来转换字符串
var numVal=2;
var boolVal=false;
var nullVal=null;
var undefinedVal=undefined;
var numValPlus=numVal+"";
var boolValPlus=boolVal+"";
var nullPlus=nullVal+"";
var undefinedPlus=undefinedVal+"";z;
console.log(numValPlus,typeof numValPlus);//2 string
console.log(boolValPlus,typeof boolValPlus);//false string
console.log(nullPlus,typeof nullPlus);//null string
console.log(undefinedPlus,typeof undefinedPlus);// undefined string
纯属个人观点,仅供参考!