JS的历史
1991年李爵士发明了WWW万维网;
1992年李爵士的同事发明了CSS;
1995年网景(Netscape)发布了一款浏览器-navigator,此浏览器是第一款能支持脚本的浏览器,发明人叫做:Branden Eich (JS之父)
ps:当时网景公司想借助java的知名度,所以将语言名称改成JavaScript,在此之前它叫做live script,并且与sun公司协商两款语言一起发布。
1996年微软发布额IE浏览器,并仿JavaScript发明了一个语言,叫做JScript,功能与前者基本一致。
ps:与此同时网景公司被微软打败了,于是就开源,成为了Firefox,并在开源的同时向ESMA(欧洲计算机制造业协会)申报标准。
在IE5.5的时候推出了一个重磅的功能,微软推出了JS发请求的功能。(但并没有很多人注意,而且只是微软在用)
2004年Gmail利用微软发明的JS发请求的功能,做了一个网页上的程序。
ps:在这之后,前端职业开始兴起,中国是在2010年左右才开始兴起前端,并大多是由后端转职。
pss:在前端火起来以后,人们逐渐发现了JS不行,因为它几乎全部都是全局变量(互相覆盖,互相干扰,没有模块化)导致项目一大,就容易出现bug,再有就是因为它的标准不行(内置代码不够多)
,然后ECMA升级了它,命名为ECMAScript 5.
ECMAScript 4 因为步子太大胎死腹中。
ECMAScript 5 又被吐槽步子迈的太小。
ps:Ralis社区的人们发明了coffee script,作为JS改良版,在里面注入了类,箭头函数,opiond chain语法。
ECMAScript 6 的步子迈的就合适了,至此终于成了一个现代编程语言。
JS是一个集大家之所长的语言
“JS原创之初并不优秀,优秀之处并非原创”
“JS现在是每年一更”
JS把还没有写进规范的特性已经用在了代码中
例:当Y1被谷歌,火狐,IE都在使用的话,ECMA就会把Y1收入到规范中,如果Y2只有在谷歌使用,其它浏览器不支持,也没有写在规范里就可以通过Babel来转义。
JS的数据类型
JS有7种数据类型
1.数字,或称数值(number)2.字符串(string)3.布尔值(boolean)4.Symbol 5.null 6.undefined 7.对象(objet)
由此可知,JS里一切皆对象是错的,因为除了对象,还有另外六种数据类型。
number:
十进制:1,1.1,.1,1.23e2
二进制:0b1,0b11 以0b(0B)开头
八进制:以0开头
十六进制:以0x(0X)开头
string:
'你好' "你好"
'.' "." .=空的,什么都没有
空字符串
' ' " "
空格字符串
空字符串和空格字符串的区别是它们的长度不一样。空字符串的长度为0,空格字符串的长度为1.
字符串的转义:
用一个\告诉浏览器,这个符号不代表结束
\=转义符
var a = '\'' = 单引号
var n = '\n' = 回车
var t = '\t' = Tab(制表符)
当想表示\的时候,可以用转义符来表示转义符
例:
var b = '\\'
多行字符串:(不是字符串里有回车)←JS抄袭额命令行里的\回车
例:
var s = '12345
67890'
如果不用\直接这样写就会报错。
另外一种打回车的方式:
例:
var s2 = '12345'+
'67890' (一般来说第二种方法更好)
ES6使用反引号就可以直接写多行字符串了(反引号就是大键盘1左边的符号)
例:
var s3 =12345 67890
→包含回车,所以它有11个字符,长度为11
布尔(boolean):
ture / false
真 / 假
&& :与运算 例:a&&b,a为真b为真则成立,否则不成立
|| : 或运算 例: a||b,a和b有一方为真则成立,否则不成立
null和undefined,它两都是类型,它们的值就是它们本身,两个值的意思都是一样的,就是什么也没有
它们的区别:
①如果一个变量没有赋值,它就是undefined。这属于是语法。
②如果你想有一个object,但是现在不想赋值,那就可以给它一个null(也可以给undefined,但是null是推荐值),有一个非对象,不想赋值,就推荐给它一个undefined,这属于惯例。
总结:null表示空对象;undefined表示非空对象。
对象(object):
对象就是hash表。
JS中前六种类型都属于基本类型,因为它们没有对象的概念,就只是一个值。object是复杂类型,复杂类型是由简单类型组成的。
语法是以花括号开头,以花括号结尾
例:{
name : 'onfire'
'age' : 18
} //左边不管加不加单引号永远都是字符串,空字符串也可以当作key,如果不加引号的话key就必须按照标识符原则,key加了单引号就功能多,不加单引号就方便一点。
要读它的话就是
person['name'] //单引号不能省
删除key用
delete person['name']
如果使用
person['name'] = undefined
只会把value变成undefined,而key还存在。
使用
for(var key in person){
console.log(key)
}
来遍历对象里的所有key,但顺序是完全看运气的。
使用
for(var key in person){
console.log(person[key])
}
来遍历对象里的所有value,顺序也是完全看运气的。
typeof的bug
type of null 返回的是'object'
type of function返回的应该是'object'但是它返回的却是'function'
以上两个都是JS里的bug。