JavaScript是解释性语言 不需要编译成文件 能跨平台
主流浏览器及内核:
IE | trident |
---|---|
Chorme | webkit/blink |
FireFox | Gecko |
Opera | presto |
Safari | webkit |
JavaScript是单线程:只有一只手拿苹果,只能一个一个拿,同一时间只能干一件事。
编译性语言:通篇翻译生成编译后的文件,然后执行
语言:c c++
优点:快
缺点:生成编译文件不能跨平台
Java .java --> javac -->编译 --> .class --> jvm --> 解释执行
解释性语言:翻译一行执行一行 (所有带尖角号的都是解释性语言)
优点:能跨平台
缺点:稍微慢一点
单线程也能实现一些多任务的效果,解释就是单线程快速切换,跟人一种多线程的错觉
JavaScript三大部分:
ECMAScript、DOM、BOM
原始值 和引用值
基本数据类型都是原始值 Number、String、Boolen、undefined、null
array、Object、function...date RegExp都是引用类型
引用类型放在堆上、原始值放在栈上
stack 栈 first in last out
栈上都是copy一份
heap 堆
var num = 100;
var num0 = 200;
栈stack ####堆heap
栈stack 地址 | 栈stack内存 | 堆heap 地址 | 堆heap内存 |
---|---|---|---|
num | 100 | 1001 | -- |
num0 | 200 | 1002 | -- |
1009 | -- | 1003 | -- |
1008 | -- | 1001 | -- |
num = 300;
栈stack 地址 | 栈stack内存 | 堆heap 地址 | 堆heap内存 |
---|---|---|---|
1011 | 100 | 1001 | -- |
num0 | 200 | 1002 | -- |
num | 300 | 1003 | -- |
1008 | -- | 1001 | -- |
var arr = [1,2];
var arr1 = arr;
栈stack 地址 | 栈stack内存 | 堆heap 地址 | 堆heap内存 |
---|---|---|---|
arr | heap1001 | 1001 | [1,2] |
arr0 | heap1001 | 1002 | -- |
1009 | -- | 1003 | -- |
1008 | -- | 1001 | -- |
var arr = [1,2];
var arr1 = arr;
arr = [1,3];
此时的arr1 是多少?
栈stack 地址 | 栈stack内存 | 堆heap 地址 | 堆heap内存 |
---|---|---|---|
arr | heap1002 | 1001 | [1,2] |
arr1 | heap1001 | 1002 | [1,3] |
1009 | -- | 1003 | -- |
1008 | -- | 1001 | -- |
错误分两种:
1.低级错误(语法解析错误)
例如标点符号错误
2.逻辑错误(标准错误,情有可原)
代码块的错误不会影响另一个代码块的执行
加减乘除
var str = 1 + 1 + '张' + '康' + (2 + 3); //“+”的字符串的拼接作用 2张康5
计算的顺序自左向右
赋值的顺序自右向左
++ -- += -= %=