1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。可是,这个版本的浏览器只能用来浏览,不具有与访问者互动的能力。......网景公司急需一种网页脚本语言,使得浏览器能够与网页互动。javascript
34岁的系统程序员Brendan Eich登场了。Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言做为网页脚本语言的可能性。Brendan Eich本人也是这样想的,觉得进入新公司后,会主要与Scheme语言打交道。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。html
javascript设计思路:java
(1)借鉴C语言的基本语法;python
(2)借鉴Java语言的数据类型和内存管理;程序员
(3)借鉴Scheme语言,将函数提高到"第一等公民"(first class)的地位;编程
(4)借鉴Self语言,使用基于原型(prototype)的继承机制。数组
Javascript语言其实是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。浏览器
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)经过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用普遍,它每每被称为JavaScript或JScript,但实际上后二者是ECMA-262标准的实现和扩展。网络
ECMAScript描述内容:app
<script> var s = "hello world"; console.log(s); </script>
<script src="index.js"></script>
index.js
var s = "hello world"; console.log(s);
声明变量时不用声明变量类型。所有使用var关键字;
var s = "hello world",
一行能够声明多个变量,而且能够是不一样类型
var name="jack",age=18;
常量:直接在程序中出现的数据。
标识符:
基本数据类型
引用数据类型
number ----- 数值
boolean ----- 布尔值
string ----- 字符串
undefined ----- undefined
null ----- null
不区分整型数值和浮点型数值;
全部数字都采用64位浮点格式存储,至关于Java和C语言中的double格式
能表示的最大值是±1.7976931348623157 x 10308
能表示的最小值是±5 x 10 -324
是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起;JavaScript中没有字符类型;经常使用特殊字符在字符串中的表达;
字符串中部分特殊字符必须加上右划线\;经常使用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线
Boolean类型仅有两个值:true和false,也表明1和0,实际运算中true=1,false=0
布尔值也能够看做on/off、yes/no、1/0对应true/false
Boolean值主要用于JavaScript的控制语句
Undefined 类型只有一个值,即 undefined。
+ - * / % ++ --
> >= < <= != == === !==
&& || !
= += -= *= /=
+ 链接,两边操做数有一个或两个是字符串就作链接运算
注意:
从上向下依次执行
<script> console.log("星期一"); console.log("星期二"); console.log("星期三"); </script>
var x= (new Date()).getDay(); //获取今天的星期值,0为星期天 var y; if ( (x==6) || (x==0) ) { y="周末"; }else{ y="工做日"; } console.log(y);
switch比else if结构更加简洁清晰,使程序可读性更强,效率更高。
var date =new Date(); var x = date.getDay(); switch(x){ case 1:y="星期一"; break; case 2:y="星期二"; break; case 3:y="星期三"; break; case 4:y="星期四"; break; case 5:y="星期五"; break; case 6:y="星期六"; break; case 7:y="星期日"; break; default: y="未定义"; } console.log(y);
功能说明:实现条件循环,当条件成立时,执行循环体的语句,不然跳出循环体
语法规则:
for(初始表达式;条件表达式;自增或自减) { 执行语句 …… }
功能说明:运行功能和for相似,当条件成立循环执行语句花括号{}内的语句,不然跳出循环;一样支持continue与break语句。
语法规则:
while (条件){ 循环体语句; ... }
在JavaScript中除了null和undefined之外其余的数据类型都被定义成了对象,也能够用建立对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的。
var s ="hello world"; var s = new String("hello word");
var s ="hello world"; console.log(s.length); // 获取字符串的长度 console.log(s.toLowerCase()); // 转为小写 console.log(s.toUpperCase()); // 转为大写 console.log(s.trim()); // 去除字符串两边空格 // 字符串查询方法 s.charAt(index) // 获取指定位置字符,其中index为要获取的字符索引 s.indexOf(findstr,index)// 查询字符串位置 s.lastIndexOf(findstr) s.match(regexp) // match返回匹配字符串的数组,若是没有匹配则返回null s.search(regexp) // search返回匹配字符串的首字符位置索引 var str1="welcome to the world of JS!"; var str2=str1.match("world"); var str3=str1.search("world"); alert(str2[0]); // 结果为"world" alert(str3); // 结果为15 // 子字符串处理方法 x.substr(start, length) //start表示开始位置,length表示截取长度 x.substring(start, end) //end是结束位置 x.slice(start, end) //切片操做字符串 var str1="abcdefgh"; var str2=str1.slice(2,4); var str3=str1.slice(4); var str4=str1.slice(2,-1); var str5=str1.slice(-3,-1); alert(str2); //结果为"cd" alert(str3); //结果为"efgh" alert(str4); //结果为"cdefg" alert(str5); //结果为"fg" x.replace(findstr,tostr) // 字符串替换 x.split(); //分割字符串 var str1="一,二,三,四,五,六,日"; var strArray=str1.split(","); alert(strArray[1]);//结果为"二" x.concat(addstr) //拼接字符串
// 建立方式1: var arrname = [元素0,元素1,….]; // var arr=[1,2,3]; // 建立方式2: var arrname = new Array(元素0,元素1,….); // var test=new Array(100,"a",true); // 建立方式3: var arrname = new Array(长度); // 初始化数组对象: var cnweek=new Array(7); cnweek[0]="星期日"; ... cnweek[1]="星期一"; cnweek[6]="星期六";
将数组元素拼接成字符串
var arr1=["hello","world"]; var str1=arr1.join("-"); alert(str1); // 结果为"hello-world"
var str1 = ["hello","world"]; var str2=str1.concat("bejing","shangdi") ; alert(str1.toString()); //返回结果为hello,world alert(str2.toString()); //返回结果为hello,world,bejing,shangdi
var arr1=[33, 44, 22, 11]; arr1.reverse(); //数组元素反转 alert(arr1.toString()); //结果为11,22,44,33 arr1.sort(); //数组元素排序 alert(arr1.toString()); //结果为11,22,33,44 arr=[10,21,256,101]; function intSort(a,b){ return a-b; } arr.sort(intSort); alert(arr); // 结果:10,21,101,256
//x.slice(start, end) //x表明数组对象 //start表示开始位置索引 //end是结束位置下一数组元素索引编号 //第一个数组元素索引为0 //start、end可为负数,-1表明最后一个数组元素 //end省略则至关于从start位置截取之后全部数组元素 var arr1=['a','b','c','d','e','f','g','h']; var arr2=arr1.slice(2,4); var arr3=arr1.slice(4); var arr4=arr1.slice(2,-1); alert(arr2.toString());//结果为"c,d" alert(arr3.toString());//结果为"e,f,g,h" alert(arr4.toString());//结果为"c,d,e,f,g"
//push pop这两个方法模拟的是一个栈操做 //x.push(value, ...) 入栈 //x.pop() 出栈 //x表明数组对象 //value能够为字符串、数字、数组等任何值 //push是将value值添加到数组x的结尾 //pop是将数组x的最后一个元素删除 var arr1=[1,2,3]; arr1.push(4,5); alert(arr1);//结果为"1,2,3,4,5" arr1.push([6,7]); alert(arr1);//结果为"1,2,3,4,5,6,7" arr1.pop(); alert(arr1); //结果为"1,2,3,4,5"
//x.unshift(value,...) //x.shift() //x表明数组对象 //value能够为字符串、数字、数组等任何值 //unshift是将value值插入到数组x的开始 //shift是将数组x的第一个元素删除 var arr1=[1,2,3]; arr1.unshift(4,5); alert(arr1); //结果为"4,5,1,2,3" arr1. unshift([6,7]); alert(arr1); //结果为"6,7,4,5,1,2,3" arr1.shift(); alert(arr1); //结果为"4,5,1,2,3"
//方法1:不指定参数 var nowd1=new Date(); alert(nowd1.toLocaleString( )); //方法2:参数为日期字符串 var nowd2=new Date("2017/10/18 19:12"); alert(nowd2.toLocaleString( )); var nowd3=new Date("10/18/17 19:12"); alert(nowd3.toLocaleString( )); //方法3:参数为毫秒数 var nowd3=new Date(5000); alert(nowd3.toLocaleString( )); alert(nowd3.toUTCString()); //方法4:参数为年月日小时分钟秒毫秒 var nowd4=new Date(2017,10,18,19,12,0,300); alert(nowd4.toLocaleString( ));//毫秒并不直接显示
获取日期和时间
getDate() 获取日
getDay () 获取星期
getMonth () 获取月(0-11)
getFullYear () 获取完全年份
getYear () 获取年
getHours () 获取小时
getMinutes () 获取分钟
getSeconds () 获取秒
getMilliseconds () 获取毫秒
getTime () 返回累计毫秒数(从1970/1/1午夜)
设置日期和时间
setDate(day_of_month) 设置日
setMonth (month) 设置月
setFullYear (year) 设置年
setHours (hour) 设置小时
setMinutes (minute) 设置分钟
setSeconds (second) 设置秒
setMillliseconds (ms) 设置毫秒(0-999)
setTime (allms) 设置累计毫秒(从1970/1/1午夜)
getTimezoneOffset():8个时区×15度×4分/度=480;
返回本地时间与GMT的时间差,以分钟为单位
toUTCString()
返回国际标准时间字符串
toLocalString()
返回本地格式时间字符串
Date.parse(x)
返回累计毫秒数(从1970/1/1午夜到本地时间)
Date.UTC(x)
返回累计毫秒数(从1970/1/1午夜到国际时间)
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x)对数进行下舍入。
log(x) 返回数的天然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
function 函数名 (参数){ <br> 函数体;
return 返回值;
}
功能说明:
可使用变量、常量或表达式做为函数调用的参数
函数由关键字function定义
函数名的定义规则与标识符一致,大小写是敏感的
返回值必须使用return
Function 类能够表示开发者定义的任何函数。
function func1(a,b){ alert(a+b); } //只要函数名写对便可,参数怎么填都不报错. func1(1,2); //3 func1(1,2,3);//3 func1(1); //NaN func1(); //NaN
function nxAdd(){ var result=0; for (var num in arguments){ result+=arguments[num] } alert(result) } nxAdd(1,2,3,4,5)
// 匿名函数的应用 (function(){ alert("tony"); })(); (function(arg){ console.log(arg); })('123');
全部浏览器都支持 window 对象。
概念上讲:一个html文档对应一个window对象.
功能上讲: 控制浏览器窗口的.
使用上讲: window对象不须要建立对象,直接使用便可.
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt() 显示可提示用户输入的对话框。
open() 打开一个新的浏览器窗口或查找一个已命名的窗口。
close() 关闭浏览器窗口。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval() 取消由 setInterval() 设置的 timeout。
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
scrollTo() 把内容滚动到指定的坐标。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用做 clearInterval() 方法的参数。
语法:<br> setInterval(code,millisec)
其中,code为要调用的函数或要执行的代码串。millisec周期性执行或调用 code 之间的时间间隔,以毫秒计。
DOM Document Object Model(文档对象模型)
DOM 定义了访问和操做HTML文档的标准方法
DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)
画dom树是为了展现文档中各个对象之间的关系,用于对象的导航。
HTML 文档中的每一个成分都是一个节点。
DOM 是这样规定的:
整个文档是一个文档节点
每一个 HTML 标签是一个元素节点
包含在 HTML 元素中的文本是文本节点
每个 HTML 属性是一个属性节点
其中,document与element节点是重点。
节点树中的节点彼此拥有层级关系。
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
访问 HTML 元素(节点),访问 HTML 元素等同于访问节点,咱们可以以不一样的方式来访问 HTML 元素。
直接查找
document.getElementById(“idname”)
document.getElementsByTagName(“tagname”)
document.getElementsByName(“name”)
document.getElementsByClassName(“name”)
间接查找
parentElement // 父节点标签元素
children // 全部子标签
firstElementChild // 第一个子标签元素
lastElementChild // 最后一个子标签元素
nextElementtSibling // 下一个兄弟标签元素
previousElementSibling // 上一个兄弟标签元素
方式1:
<div id="div" onclick="eventfirst(this)">第一种事件绑定</div> <script> function eventfirst(self){ // 形参不能是this; console.log("第一种事件绑定!"); console.log(self); } </script>
方式2:
<p id="event2">第二种事件绑定!</p> <script> var ele=document.getElementById("event2"); ele.onclick=function(){ console.log("ok"); console.log(this); // this直接用 }; </script>
获取文本节点的值:innerText innerHTML
elementNode.setAttribute(name,value)
elementNode.getAttribute(属性名)
elementNode.removeAttribute(“属性名”);
elementNode.className
elementNode.classList.add
elementNode.classList.remove
节点操做,包括增删改查
建立节点:createElement
添加节点:appendChild
删除节点:removeChild
替换节点:replaceChild