学习网址:http://www.w3school.com.cn/js/js_intro.asp

 

====什么是js

   JsJavaScript的简称,是网景(Netscape)公司开发的一种基于客户端浏览器、面向(基于)对象、事件驱动式的网页脚本语言,主要有以下特点:

JavaScript 被设计用来向 HTML 页面添加交互行为。

JavaScript 是一种脚本语言(脚本语言是一种轻量级的编程语言)。

JavaScript 由数行可执行计算机代码组成。

JavaScript 通常被直接嵌入 HTML 页面。

JavaScript 是一种解释性语言(就是说,代码执行不进行预编译)。

所有的人无需购买许可证均可使用 JavaScript

====什么是js解析引擎

 1.JavaScript解析引擎就是能够―读懂JavaScript代码,并准确地给出代码运行结果的程序,

 2.JavaScript引擎本身也是程序,代码编写而成。比如V8就是用C/C++写的

 3.JavaScript引擎是程序,我们写的JavaScript代码也是程序,如何让程序去读懂程序呢?这就需要定义规则:

比如:var a = 100+100;

左边var代表了这是申明(declaration),它申明了a这个变量

右边的+表示要将100100做加法

中间的等号表示了这是个赋值语句 

最后的分号表示这句语句结束了

上述这些就是规则,JavaScript引擎就可以根据这个标准去解析JavaScript代码了。

4.ECMAScript(ECMA欧洲计算机制造联合会)就是定义了所有的规则.ECMAJavaScript之间的关系:js是网景公司的 通过ECMA组织制定的标准 标准制定后不能叫JavaScript  因为版权原因

 

5.js使用范围

JavaScript引擎是浏览器的组成部分之一。一般情况下JavaScript引擎都是浏览器开发商自行开发的,比如:IE9ChakraFirefoxTraceMonkeyChromeV8引擎. 也就是说,只要 web控件,能加载网页的环境就能翻译js代码,对环境没有太高的要求.比如:Windows下的浏览器,os下的浏览器,安卓iOS下的浏览器,APP内置的web控件等等.

====hello,world

 document.write(“hello,老七”)

 alert(“你好世界”)

====怎么在页面中加入js

1.直接加入(head,body)

 <head><script>document.write(666);</script></head>

 <body><script>alert(666);</script></body>

2.外部引入(head,body)

<head><script src="xxxx.js">  </script></head>

<body><script src="xxxx.js">  </script></body>

==== js放置位置

1.放置在head里面时:js的函数先被加载完成,随时准备被调用执行

2.放置在body,js的函数会在界面加载过程中才开始加载,然后随时准备被调用

3.放置在headbody中都可以,数量也没有限制,但是要尽量少,不然会影响加载速度

 

 

====语句和代码执行顺序

1.具有某一个独立执行结果的代码段

2.一般情况一行代码就是一个执行语句,执行语句结尾可以用分号也可以不用分号.

3.如果一行有多个执行语句,之间用分号隔开

4.浏览器的引擎执行代码顺序是在代码块里按照顺序执行(开启了异步线程除外)

代码块通常是用大括号括起来的

比如:<script>{document.write(“666”);document.write(“111”);}</script>比如:函数的执行体,条件语句的执行体

异步线程后面会讲到,执行程序都是被放置在一个线程里执行任务的

====变量

var a=3;

var a,b;

var a,b,c=4;

解释:关键字var声明a是一个变量,里面存放了一个数字3,””=””的意思都是,把等号右边的具体数据,放在等号左边指向的地方.

 


====注释方式和原理

1.添加注释来对 JavaScript 进行解释,或者提高其可读性

2.单行注释: //这段文字是注释

3.多行注释:/* 这段文字是注释 */

4.Js代码在被解释的时候,遇到这样的表达方式,就不会去执行注释里面的东西

====基本运算符

1.加减乘除(+-*/)

 var a=4;var b=5;var c=a+b;alert(c);

求余%

 var a=5;var b=3;var c=a%b;alert(c);//2

2.三目code?code:code;

var a=5;var b=3; a>b?alert(666):alert(111);

3.大于 小于 等于 不等于

>    <   ==   !=

4.累加累减++ --

var a=7;alert(++a);

var a=7;alert(a++);

注意:①前缀是取值之间做加法,后缀是取值之后再做加法②表达不清晰时用括号:var a=7;var b=10--a;alert(b);换成var a=7;var b=10-(-a);alert(b);

5.逗号,(①对象字面量声明,②执行依次往下)

         var array=[5,2,1,6,7]

var a=(1,2,3,4,5);alert(a);//5

var a=(1+2,2+2);alert(a);//4

5.求反!

var a=0;alert(!a);//true

6.逻辑或||

var a=5;var b=2;(a>3||b>3)?alert(666):alert(111);//666

7.逻辑与&&

var a=5;var b=2;(a>3||b>3)?alert(666):alert(111);//111

8.位运算符(只讲一个^)相异为1相同为0

每一位转化成机器语言然后来做对应的计算

面试题:不通过第三个变量交换两个变量的值

var a=10;

var b=20;

a=a^b;

b=a^b;

a=a^b;

9.赋值表达式

=  +=  -=  *=  /=   %=

 

====控制语句

1.希望指定的条件成立时执行使用if

if(条件表达式){执行代码块}

 

2.希望条件成立时执行一段代码,而条件不成立时执行另一段代码使用if-else

if(条件){}else{}

 

3.需要选择多套代码中的一套来运行时使用if-else_if-else

if(条件){}else if(条件表达式){}else{}

 

4.运行次数已确定的情况下使用for

for(语句1;语句2;语句3){执行体}

 

5.终止整个循环用break,终止当前这次循环用continue

for(var a=10; a>0;a--){if(a<8){break;};document.write(a)}//1098

for(var a=10; a>0;a--){if(a>8){continue;};document.write(a)}//87654321

 

5.希望选择执行若干代码块中的一个使用switch

---匹配到对应的结果后,从结果代码处依次往下执行

 


----没有匹配到结果-default

 


----匹配到对应的结果后,执行完了之后不要往下依次执行,跳出switch语句--break

 


6.在指定条件为 true 时循环执行代码用while

 


7.先执行一遍代码块,然后在指定条件为 true 时循环执行代码用do-while

 

 


====函数

1.函数就是一个具有某些功能的代码块(可以看作是个工具),这个代码块只能被事件激活,或者在函数被调用时才会执行。你可以在页面中的任何位置调用.

2.函数的表达形式:function 函数名(){}

3.函数(工具)的使用:函数名+() 

4.弹框 function fn1(){alert(666)}

5.参数 function fn2(name1){alert(name1)}   fn2()

6.返回值:函数在调用执行完以后得到的结果 function fn3(){return 1}  alert(fn3())

return 返回的意思,就是说函数执行到这里就有一个结果产生了,函数就不继续执行了.

7.加减乘除

8.函数体内部调用自己:阶乘

1自己调自己:function fn4(name1){

      document.write(name1);

      if(name1>10){ name1--; fn4(name1);}

    }//121110

2:阶乘

function fn5(name1){

  if(name1<1){return 1}

  else {return name1*fn5(name1-3);}

}

document.write(fn5(100));

 

 

 

 

9.形参与实参

①形参就是取的名字,必须保证传入数据时按照定义好的形参个数和位置,这个名字在函数体里使用,实参是调用函数的时候外面传入的实际的数据

function add(name1){alert(name1)} add(90)//name1就是形参,90就是实参

 

②为了防止你设计的工具,在使用的时候少传入了实参个数,我们给他设定默认值

如果不设定默认值的话,缺少的参数,会被当做传入undefined来使用

function fn6(name1,name2){

    if(name1==undefined){name1=0}

    if(name2==undefined){name2=0}

    return name1+name2

    }

alert(fn6());alert(fn6(10));alert(fn6(10,10));

③为了防止你设计的工具,在使用的时候多传入了实参个数,我们可以在设计工具时就做出预判,并做出相关处理.如果不做处理的话,多出的参数会被省略掉

function fn7(name1,name2){

    if(arguments.length!=2){document.write("你是不是傻,fn7这个函数只需要2个参数")}

    return name1+name2

    }

document.write(fn7(10,10,10,10,10))

:对象的知识点(常用在匿名函数)arguments表示实参对象,通过这个对象的length属性可以获得实参的个数,arguments除了可以获取实参个数,常用的还有获取实参和获取使用实参的目标函数function fn8(a,b){return arguments[0]+arguments[1]}

function fn9(a){if(a==1){return 1};

return arguments[0]*arguments.callee(arguments[0]-1)} 

10.函数作为参数(重中之重)

函数是我们设计出来的工具,也可以作为参数传入另外一个函数(传入以后怎么用就是另外的函数的事了)

①传入的函数没有参数没有返回值

function fn(){

    document.write("华清远见是一个培养科学家艺术家的地方");

    }

function fn10(name1){

    document.write("公司简介:");

    name1();

}

fn10(fn)

②传入的函数有参数没有返回值

function fn(n1){

    document.write(n1*n1);

    }

function fn11(name1,name2){

     name1(name2)

}

fn11(fn,8);

③传入的函数有参数有返回值

function fn(n1,n2){

    return n1+n2;

    }

 

 

function fn12(name1,name2,name3){

    return name1(name2,name3)

    }

document.write(fn12(fn,10,20));

④传入的函数在调用的时候设计(回调)

function fn13(n1,n2){

    n1(n2);

    }

fn13(function fn(name1){document.write(name1)},666);

 

11.变量的作用域

作用域指声明的变量使用的范围,通常理解为大括号里面和外面

function fn(){

    var a = 10;

    }  

document.write(a);//什么也不显示:外面访问不了里面(局部)的变量

var b = 7; 

function fn1(){

    document.write(b);

    }

fn1();//7:里面(局部)能访问到外面(全局)的变量

③局部和全局同名变量优先级

var a = 7; 

function fn(){

    var a = 10;

    document.write(a);

    }

fn();//10:在这个函数内部局部变量会覆盖掉全局变量

document.write(a);//7

④声明变量的位置不会影响空间的开辟,只会影响初始化数据的位置//内部有函数时声明比变量高一级

function fn(){

    document.write(a);

    var a = 10;

    }

fn();//undefined  不是什么都不显示而是undefined说明变量声明了但是还没有放数据进去:引擎在编译的时候会先把函数体内的所有声明的变量(不管位置在哪里),全部先开辟一个空间,然后到了var a = 10的地方,给它赋值10

 

 

 

====闭包

有一个问题,函数外面访问不了函数里面的变量.用闭包就可以实现这个需求

1.函数内部的变量都会保存在它自己内部,通过外部调用内部的函数达到访问内部变量的目的,就是闭包

 

2.函数内部的函数

 function fn(){

    var a = 20;

    function fm(){return a}

    return fm();

    }

document.write(fn());//20

3.闭包

function fn(){

    var a = 20;

    function fm(){return a}

    return fm;

    }

document.write(fn()());//20  fn()的结果是一个函数,在加一个括号fn()()就是调函数.

====匿名函数:不取名字的函数

1.小括号

小括号的意思是指向一个空间

var a = 10

var b = 10

var c = (a+b)+10//a+b的结果放在内存中的,怎么用它呢,去找到20这个数值(指向)

function fn(){}//指向参数对象

if(a>10){}//指向存放true或者false值的空间

function fn(){}; fn()//执行函数:指向函数对象执行

(function fn(){})// 指向函数对象:整条语句代表 指向存放了这个函数工具的空间

(function fn(){})()//指向函数对象的并且调用了函数

2.匿名函数

 就是没有取名字的函数,要执行函数,必须用名字加上小括号,没有取名字的函数怎么调用呢.

①直接作为参数传入函数的时候

function fn(n1,n2){n1(n2)}

fn(function(name1){document.write(name1)},666);

②利用小括号的功能

(function(){document.write(666)})();

====对象                                      

1.对象就是一个具体的东西,它很复杂

比如:一个手机就是一个对象,它具有重量,长度,宽度等等特性,还具有打电话,发短信,玩游戏等等功能.//20  “hello”

再比如:一个document就是一个对象,它具有title 文档标题,bgColor文档背景颜色等等特性,write动态向页面写入内容,getElementById得到对应id的标签等等功能

2.一个对象存在(创建)就会在内存中有一个对应的空间.

3.创建和操作对象

--键值对的方式,每一对键值对结尾都有逗号.

var person1 = {};

//这样就创建好了一个对象,名字叫person1,这个对象既没有特性(属性),也没有功能(方法)

 

var person2 = {name:"莫文蔚",englishName:"karen",age:46,};

//这样就创建好了一个对象,名字叫person2,它有三个属性:分别是name englishName age

 

var person3 = {name:"karen",kill:function(){alert("pentakill!!!")},};

//这样就创建好了一个对象,名字叫person3,他有一个属性:name,一个方法:kill

 

②使用属性和方法

var person3 = {name:"karen",kill:function(){alert("pentakill!!!")},};

alert(person3.name);alert(person3["name"]);

person3.kill(); person3["kill"]()

 

③访问的属性不存在

访问的过程就是指向,如果指向的地方找不到(没有),不会出错而是返回一个undefined.

 

④添加新属性和方法

var person = {};

person.name = "karen"

person.kill = function(){document.write("pentakill!!")}

 

4.常用创建对象的方式

var person1 = {};

var person2 = new Object();

Person = function(name){//构造函数的等号左边的名字首字母大写

    this.name = name;

    this.sing = function(){document.write("阴天,在不开灯的房间")};

    }

var person3 = new Person("莫文蔚");

 

function creatObject(){

    var person = new Object();

    return person

    }

var person4 = creatObject();

 

function creatPerson(name,age){

    var person = new Object();

    person.name= name;

    person.age = age;

    return person

    }

var person5 = creatPerson("莫文蔚",46);

Person5.name

 

 

====数据类型

1.数字

 整数,小数 10  1.5

2.字符串

①可以通过String对象创建

②由单引号or双引号引起来的文本,如果引号里面还有引号整个字符串是开始和结束之间的文本

“karen” ‘boy’ “The ‘girl’ is the most strange animal in the world”

3.布尔值

真假:true false

这些数据会判定为false:undefined NaN(代表不是数字) null “” 0 

4.null()

表示无值

5.undefined(未定义)

表示没有初始化

NaN(非数值对象)

 

6.对象

自定义的:

提供的:

 

====对象

点进去哪里不会查哪里:http://www.w3school.com.cn/jsref/index.asp

JavaScript 对象

Array Boolean Date Math Number String RegExp Functions Events

Browser 对象

Window Navigator Screen History Location

HTML DOM 对象

Document Element Attribute Event

HTML 对象

<a><area><audio><base><body><blockquote><button><canvas><col><colgroup><datalist><del><details><dialog><embed><fieldset><form><frame><frameset><iframe><img><ins><input> button<input> checkbox<input> color<input> date<input> datetime<input> datetime-local<input> email<input> file<input> hidden<input> image<input> month<input> number<input> password<input> range<input> radio<input> reset<input> search<input> submit<input> text<input> time<input> url<input> week<keygen><label><legend><li><link><map><menu><menuitem><meta><meter><object><ol><optgroup><option><param><progress><q><script><select><source><style><table><td><th><tr><textarea><time><title><track><video>

====Array

创建(2)

var a = [1,”qwe”,!5];

var a = new Array()

使用

a   a[0]

属性:

constructor 所建立对象的函数参考(打印出来看看)

length 获取数组元素的个数,即最大下标加1

方法:

concat(array1,array2)将两个或两个以上数组值连接起来,合并后返回结果//结果是3个或以上数组

join(“666”) 将数组中元素合并为字符串,666为分隔符(666可以改).如省略参数则直接合并,不再分隔

pop() 移除数组中的最后一个元素并返回该元素//数组改变

shift() 移除数组中的第一个元素并返回该元素//数组改变

unshift(value)为数组的开始部分加上一个或多个元素,并且返回该数组的新长度//数组改变

push(value) 在数组的末尾加上一个或多个元素,并且返回新的数组长度值//数组改变

reverse() 颠倒数组中元素的顺序,反向排列

sort() 按照元素的字母顺序排列,如果不是字符串类型则转换成字符串再排序,返回排序后的数组 //1 12 2

splice() 为数组删除并添加n个新的元素//a.splice(0,2,"野区一霸",666)//删除从0下标开始的2个元素,并把 "野区一霸",666这两个元素放在数组最前面.

toString() 将数组所有元素返回一个字符串,其间用逗号分隔

 

====字符串

属性

length 返回字符串的字符长度

方法:

+可以连接两个字符串,非字符串的数会转化成字符串再+

big() 把字符串中的文本变成大字体(<BIG>)

blink() 把字符串中的文本变成闪烁字体(<BLINK>)

bold() 把字符串中的文本变成黑字体(<B>)

fontcolor(color)设置字符串中文本的颜色(<FONT COLOR=>)

fontsize(size)给字符串设置字号(<FONTSIZE=>)

italics() 把字符串中的文本变成斜字体(<I>)

small() 把字符串中的文本变成小字体(<SMALL>)

strike() 把字符串中的文本变成划掉字体(<STRIKE>)

sub() 把字符串中的文本变成下标字体((SUB>)

sup() 把字符串中的文本变成上标字体(<SUP>)

charAt(index) 返回指定索引处的字符

concat(string2)连接两条或多条字符串并返回//原值不改变

replace(regex, newString)将字符串中的某些字符替换成其它字符并返回//原值不改变

split(delimiter)将字符串分配为数组

substr(startIndex, length) startIndex,length个字符

substring(startIndex, endInldex) startIndexendIndex之间的字符,不包括endIndex

toLowerCase() 把字符串中的文本变成小写

toUpperCase() 把字符串中的文本变成大写

link(url)给字符串添加href(<A HREF=>) //src  href  url 

 

====Math

Math就是个对象,不用创建

Math

属性

E 欧拉常量,自然对数的底(约等于2.718)

LN2 2的自然对数(约等于0.693)

LN10 10的自然对数(约等于2.302)

LOG2E 2为底的e的对数.(约等于1.442)

LOG10E 10为底的e的对数(约等于0.434)

PI π的值(约等于3.14159)

SQRT1_2 1/2(0.5)的平方根(l除以2的平方根,约等于o.707)

SQRT2 2的平方根(约等于1.414)

 

方法:

acos(x) 返回数字的反余弦值

asin(x) 返回数字的反正弦值

atan(x) 返回位于-PI/2 PI/2 的反正切值

atan2(y,x) 返回(x,y)位于 -PI PI 之间的角度

exp(x) 返回 E^x

pow(x,y) 返回 y^x 的值

log(x) 返回底数为E的自然对数

sqrt(x) 返回数字的平方根

  

abs(x) 返回数字的绝对值

ceil(x) 返回 x区间的最大整数

floor(x) 返回 x 区间的最小整数

max(x,y) 返回 x y 之间较大的数

min(x,y) 返回 x y 之间较小的数

round(x) 四舍五入后取整

cos(x) 返回一个数字的余弦值

sin(x) 返回数字的正弦值

tan(x) 返回一个角度的正切值

random() 返回位于 0 1 之间的随机数

 

====Date 

var a = new Date();

方法:

getDay() 返回一周中的第几天(0-6)

getYear() 返回年份.2000年以前为2,2000(包含)以后为4

getFullYear() 返回完整的4位年份数

getMonth() 返回月份数(0-11)

getDate() 返回日(1-31)

getHours() 返回小时数(0-23)

getMinutes() 返回分钟(0-59)

getSeconds() 返回秒数(0-59)

getMilliseconds() 返回毫秒(0-999)

getTime() 返回从1970110:0:0到现在一共花去的毫秒数

getTimezoneoffset() 返回时区偏差值,即格林威治平均时间(GMT)与运行脚本的计算机所处时区设置之间相差的分钟数)

parse(dateString) 返回在Date字符串中自从19701100:00:00以来的毫秒数

setYear(yearInt) 设置年份.2位数或4位数

setFullYear(yearInt)设置年份.4位数

setMonth(monthInt) 设置月份(0-11)

setDate(dateInt) 设置日(1-31)

setHours(hourInt) 设置小时数(0-23)

setMinutes(minInt) 设置分钟数(0-59)

setSeconds(secInt) 设置秒数(0-59)

setMilliseconds(milliInt) 设置毫秒(0-999)

setUTCFullYear(yearInt) 依据国际时间来设置年份

setUTCMonth(monthInt) 依据国际时间来设置月(0-11)

setUTCDate(dateInt) 依据国际时间来设置日(1-31)

setUTCHours(hourInt) 依据国际时间来设置小时

setUTCMinutes(minInt) 依据国际时间来设置分钟

setUTCSeconds(secInt) 依据国际时间来设置秒

setUTCMilliseconds(milliInt)依据国际时间来设置毫秒

setTime(timeInt) 设置从197011日开始的时间.毫秒数

toGMTString() 根据格林威治时间将Date对象的日期(一个数值)转变成一个GMT时间字符串,:Weds,15 June l997 14:02:02 GMT

toUTCString() 根据通用时间将一个Date对象的日期转换为一个字符串

toLocaleString() Date对象的日期(一个数值)转变成一个字符串,使用所在计算机上配置使用的特定日期格式

toSource() 显示对象的源代码

toString() 将日期对象转换为字符串

UTC(yyyy, mm, dd, hh, mm, ss, msec)返回从格林威治标准时间到指定时间的差距,单位为毫秒

 

posted on 2017-08-16 22:38  YC小杨  阅读(255)  评论(0编辑  收藏  举报