JavaScript 作为 Netscape Navigator 浏览器的一部分首次出现在 1996 年。它最初的设 计目标是改善网页的用户体验。 作者:Brendan Eich 期初 JavaScript 被命名为 LiveScript,后因和 Sun 公司合作,因市场宣传需要改名 JavaScript。后来 Sun 公司被 Oracle 收购,JavaScript 版权归 Oracle 所有。
1.shell 部分——用户能操作部分(壳) 2.内核部分——用户看不到的部分 1)渲染引擎(语法规则和渲染) 2)js 引擎 3)其他模块(如异步)
js是解释性语言,不需要编译成文件,可跨平台,执行时看一行翻译一行,不生成特定文件。js引擎是单线程即同一时间只能做一件事。编译型语言例Java它是通篇翻译后,生成翻译完的文件,程序执行翻译后的文件。java先通过javac,编译成.class文件,通过jvm(Java虚拟机)进行解释执行。 .java–>javac–>编译–>.class–>jvm–>解释执行
js分为ECMAscript,DOM,BOM三大类 ECMA(欧洲计算机制造联合会)标注:为了取得技术优势,微软推出了 JScript,CEnvi 推出 ScriptEase,与 JavaScript 同样可在浏览器上运行。为了统一规格JavaScript兼容于 ECMA 标准,因此也称ECMAScript。
`
1、页面内嵌标签,写 head 里面也行,写 body 里面也行 例
2、外部 js 文件,引入 为符合 web 标准(w3c 标准中的一项)结构(html)、行为(js)、样式(css) 相分离,通常会采用外部引入。 一个文件中可以包括多个 css,js,特殊写页面,大部分写在外部。如果同时写了内部的 js 和外部的 js,那么是外部的 js 文件显示出来1、变量(variable) HTML,css 不是编程语言,是计算机语言,编程语言需要有变量和函数,变量是存放东西,方便后续使用的框 1)变量声明 1.声明、赋值分解 var a; 这个叫变量声明。我们向系统中申请了 var 这个框,命名叫 a 给 a 赋值 100,写作 a =100,这里不的等号是赋值 var a ;a =100;可以简化写成 var a=100; 如写做:var a = 10;a=20;那么后面的 20 就会覆盖掉前面的 10 2)命名规则(用接近的英文单词)起变量名一定要以英文语义化 1.变量名必须以英文字母、、$ 开头 2.变量名可以包括英文字母、、$、数字 3.不可以用系统的关键字、保留字作为变量名 关键字(有特殊语法含义的字) break else new var case finally return void catch for switch while default if throw delete in try do instanceof typeof 保留字(未来可能当做关键字的词) abstract enum int short Boolean export interface static byte extends long super char final native synchronize class float package throws const goto private transient debugger implements pritected volatile double import public
例:var a = 10; var b = 20; var c; c = a + b; 先运算等号右边的 a+b,运算完后,再赋值给左边 c 先取值,再赋值 运算大于赋值的优先级 js 是动态语言,动态语言基本上都是解释性语言,解释性语言基本上都是脚本语言 js 是浮点型语言(带小数点)
1、不可改变的原始值(栈数据)栈 stack Number,String,Boolean,undefined,null 已经放进去的值不可改变,只会改房间编号为 null(硬盘原理) Number 数字,例 var a = 123; String 字符串,例 var a=”语言”,““是空串,空串里没有空格 Boolean 布尔数字,就两个值,false,true undefined 是没有定义的,表示还没赋值,仅一个值 underfined null 代表空,占位用,用空值来覆盖 原始值是我把一个值放到另一个值里面,改了第一个值,第二个值不变 例 var a =10; var b = a; a = 20; document.write(b); 答案:10 2.引用值(堆数据)大致上放堆 heap 里面 array 数组, Object, function … data,RegExp 正则 var arr = [1,2,3,4,5,false,”abc”]; //这是数组 例:var arr = [1]; var arr1 = arr; arr.push(2); document.write(arr1); 答案:arr 是 1,2。arr1 是 1,2 引用值是把第一个值放到第二个值里面,改第一个值,第二个值也改变 var arr = [1,2];var arr1 =arr;arr.push(3); 答案:这往[1,2]放 3,arr 和 arr1 都是[1,2,3] 引用值是在栈内存里面放堆的地址,拷贝的也是地址,所以改变 arr,arr1 也变了 var arr = [1,2]; var arr1 =arr; arr = [1,3]; document.write(arr1) 答案:arr1= [1,2];在赋值arr=[1,3]时在堆里新建了一个新的房间存放1.3然后将arr的指针指向这个房间并且arr1的指向房间不变。
1、语句后面要用分号结束“;”但 function test(){},for(){},if(){}后面都不用加分号 2、js 语法错误会引发后续代码终止,但不会影响其它 js 代码块 错误分为两种 1)低级错误(语法解析错误),不能写中文 2)逻辑错误(标准错误,情有可原,错的那个执行不了) 3、书写格式要规范,“= + / -”两边都应该有空格 运算操作符 + 1.“+”作用:数学运算、字符串链接 2.任何数据类型加字符串都等于字符串 例 var a = “a”+ true + 1; //打印 atrue1 例 var a = 1 + “a” + 1 + 1; //打印 1a11 例 var a = 1 + 1 + “a” + 1 + 1; //打印 2a11,从左向右运算 例 var a = 1 + 1 + “a” +( 1 + 2); //打印 2a3 运算符- * / 例 var a = 0 – 1; //等于-1 例 var a = 2 * 1; //等于 2 例 var a = 0 / 0; //答案是 NaN,应该得出一个数字类型的数,但是没法表达, 就用 NaN (NaN 是 Not a Number 非数,不是数,但是是数字类型 例 var a = 1 / 0; //是 infinity 例 var a = -1 / 0; /是-infinity %,摩尔,模,是取余数的意思 例 var a =5%2 //5%2 是五除二的余数,商二余一 例 var a =5%1 //是五除一的余数,结果是 0 例 var num = 1 % 5; //意思是 1 除以 5 的余数。商 0 余 1 例 var a =4%6 //是四除六的余数,结果是 4 例 var a = 4;a % = 5;document.write(a); // 4 例 var a = 0;a % = 5;document.write(a); //0 例 var a = 10;a %= 2;document.write(a); //0 例 var a = 3;a % = 4; //4 “-”,“*”,“/“,“%”,”=“,“()” 优先级”=“最弱【赋值符号优先级最低】,”()”优先级较高