JavaScript笔记

JavaScript概述


1.JavaScript概述

1.1JavaScript是什么,有什么用?

JavaScript是因特网上最流行的脚本语言
脚本语言不能单独使用,必须嵌入到其他语言中组合使用
JavaScript不能单独使用,必须和其他语言(HTML)结合使用
JavaScript就可以控制HTML做一些事情了

JavaScript由浏览器直接解释执行,不用编译(解释一条,执行一条。故写代码时能用一条语句就不要用两条语句)

JavaScript代码较为提倡链式编程
但是要根据代码的可读性和 效率做取舍

作用是:可以控制前端页面的逻辑操作

例如:
a.JS可以控制CSS的样式;
b.JS可以进行对表单项校验(重点)
c,JS可以对HTML元素进行动态控制
特点:
a.交互性(JavaScript控制HTML元素)
b.安全性(没有访问系统文件权限,无法用来做木马病毒)
c.跨平台性(浏览器有JS的解析器,只要有浏览器就能运行JS代码,和平台无关)


1.2JavaScript的组成

ECMAScript(核心):描述了JS的语法和基本对象
DOM文档对象模型:处理网页内容的方法和接口
BOM浏览器对象模型:与浏览器交互的方法和接口


1.3JavaScript和Java的关系

JavaScript和Java一点关系都没有(雷锋和雷峰塔)

JavaScript和Java的区别:

JavaScript代码可以直接在浏览器执行,
而Java必须先经过编译才能执行

JavaScript是弱类型语言,Java是强类型语言

强类型语言:要求变量的使用严格符合定义。(例如:变量声明为INT类型,装载其他类型例如String类型就会报错)。编程时痛苦,调BUG时舒服

弱类型语言:不要求变量的使用严格符合定义。(例如:变量声明后储存数字可以,储存字符串也可以)。编程时舒服,调BUG时痛苦

学习弱类型语言: 有误区的
误区:随随便便就能使用
一定要按照强类型语言的标准规范来学。


2.JavaScript和HTML的结合方式

两种使用方式
内部使用
<script type=”text/javascript”>JavaScript的代码

外部引用
<script type=”text/javascript” src=”javascript文件路径”>

外部引用时script标签内不能有script代码,即使写了也不会执行

注意:<script>标签写在任意地方都可以,但是要注意HTML和JAVASCRIPT的加载顺序

如果JS代码用到了HTML元素,那么必须保证被使用的HTML元素被先加载,否则会报空指针。(无法获取未定义或 null 引用的属性“innerHTML”)

3.JavaScript语法及使用(重点)

3.1注释

单行注释 Myeclipse快捷键 ctrl+shift+c
多行注释/* */


3.2变量(重点)


3.2.1变量简述

标示内存中的一块空间,用于存储数据,数据是可变的
格式:
var 变量名 = 变量值;
JavaScript中的变量声明要用var关键字
变量名只有一种类型——————引用数据类型
变量值的数据类型分为:原始数据类型 引用数据类型


3.2.2原始数据类型

类似于JAVA中的基本数据类型。(所有的值存在于内存栈区,大小固定,用于速查)
String 字符串类型
boolean 布尔类型: true,false
number 数字类型:整数,小数,NaN(Not a Number)
null 空,对象占位符:表示引用类型的对象不存在
一般用于进行废除对象。(即每当一个对象不用时,手动设置其为空,在函数结束或者其他情况,无用存储单元收集程序会将其回收)
undefined 值未定义:即声明的变量未赋值,系统会自动赋值为undefined
Undefined是一个默认的值

变量就像一个盘子,什么都能盛装。
变量值的类型可以用typeof()来判断。
例如: var str=”aa”;alert(typeof(str));//string 变量的大小写是敏感的,yy和YY不是一个变量。

为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
undefined是从null派生出来的,因此你在判断时 null==undefined得到的结果是true


3.2.3引用数据类型

引用类型通常叫做类(.class),遇到引用值,所处理的就是对象。但从传统意义上来讲,JavaScript并无真正的类。

例如:var obj = new Object();
对象定义:由new关键字加上要实例化的对象名进行创建。

Object是JavaScript中使用最多的一种类型,是所有对象的父对象。虽然object不具备多少实际功能,但对于存储和传输数据而言,它确实非常理想。
例如: var flag = new Boolean(“false”); Alert(flag);//true

常用对象String,Number,Boolean,Array,Date,Math,RegExp

注:instanceof可以用来判断对象是否属于某类型
返回true和false .
例如:
var str = new String();
Alert(str instanceof String);//true


3.2.4类型转换

1、转换成字符串 boolean,string,number 它的原始值其实是一个伪对象,在JS中有Boolean,String,Number这样的对象,可以直接通过原始值调用其toString()方法来转换成字符串。

例如: var flag = true; alert(flag.toString()); var num = 10; alert(num.toString());

开发中一般不使用,一般使用 + 运算符 加上一个字符串的形式来转换字符串。例如:var num =10;alert(num+””);

2、字符串转换成数字

parseInt(string);把string按照字面值 解析为number类型的值并返回,整数型(小数部分截掉不要)
如果string某一个字符无法按字面值解析为数字,那么从该字符开始往后截掉不要如果string第一个字符无法被解析为number,那么返回NaN

parseFloat(string); 把string按照字面值 解析为number类型的值并返回,浮点型
如果string某一个字符无法按字面值解析为数字,那么从该字符开始往后截掉不要
如果string第一个字符无法被解析为number,那么返回NaN

3、强制类型转换(了解)
Boolean(value) - 把给定的值转换成 boolean 型;
若value值存在或有意义,则为true;
若value值不存在或者无意义,则为false。

Number(value) - 把给定的值转换成数字(可以是整数或浮点数)。 string:字面值若能解析为数字,则正常转换。如果字面值有不能解析为数字的字符,则返回NaN

boolean:true转为1,false转为0
null:转为0
undefined:转为NaN

String(value) - 把给定的值按照 字面值 转换成字符串;
以上三种强制类型转换方法,返回的值均为原始数据类型的值


3.3运算符


3.3.1算数运算符

+符号 算术运算加(无字符串出现,把其他值强转为number类型进行加法运算) 字符串连接符(其中有一项必须是字符串) number转换符(其他类型强转number): 例如:var str = +"11";

-符号 算术运算减(会把其他值强转为number类型进行减法运算) number转换符(其他类型强转number,区别于+,都是负数): 例如:var str = -"11";


3.3.2比较运算符

==逻辑等。比较值 (如果值相同,true; 如果值不同,返回false)

===全等。 比较值和类型。如果值和类型都相同,则为true;值和类型有一个不同,则为false

!=不等。比较值 (如果值不相同,true; 如果值相同,返回false)

!==不全等。比较值或比较类型,如果值和类型都相同,则为false;值和类型有一个不同,则为true


3.3.3逻辑运算符

JS中逻辑运算符不包含& 。 &在JS中代表位运算。


3.4流程控制语句

对程序运行流程控制的表达式


3.4.1判断语句

IF语句
if(表达式){

}else{

}
表达式最终都会朝着BOOLEAN类型进行运算,如果不是Boolean类型则进行强转


3.4.2循环语句

for循环

for(var i=0;i<=8;i++){
// 循环体
}
和JAVA中仅有的区别:
JavaScript中定义变量用var关键字

for..in循环
(如果是自定义的数组可以用for..in循环,如果是方法返回的数组不要用for..in循环,用普通for循环)
类似于Java的增强for循环(但有本质区别)

For...In 声明用于对数组或者对象的属性进行循环操作。
for ... in 循环中的代码每执行一次,就会对数组的元素进行一次操作。

for(var 变量 in 对象或数组){
// 循环体
}

区别于Java:
遍历数组时,其中遍历变量代表的是数组的下标。
例如:
数组遍历:
var p=[1,2,3];
for(var i in p){
alert("数组下标:"+i);
alert("数组元素:"+p[i]);
}


3.5对象(进阶)


3.5.1Number对象

创建的三种方式:
var num = 10;//伪对象,值是原始数据类型
var num = new Number(10);//值是引用数据类型,如果省略构造参数,默认为0
var num = Number(10);//强转伪对象,值是原始数据类型

方法:valueOf() 返回一个 Number 对象的基本数字值。


3.5.2Boolean对象

创建的三种方式:
var flag = false;//伪对象
var flag = new Boolean(false);如果省略构造参数默认是false
var flag = Boolean(false);
:如果构造函数省略参数,或者设置为 0、-0、null、""、false、undefined 或 NaN,则该对象设置为 false。否则设置为 true(即使 value 参数是字符串 "false")。


3.5.3String对象(重点)

创建的三种方式:
var str = "abc";//伪对象原始数据类型的值 var str = new String("abc");//如果省略,默认为空字符串
var str = String("abc");//伪对象原始数据类型的值

属性:Length 字符串的长度

方法:
charAt(index) 返回指定位置的字符

concat(str1,str2,str3….) 连接字符串,并返回连接后结果

indexOf(searchvalue,fromindex) 检索字符串

replace(regexp,replacement) 替换字符串
只能替换第一次出现的字符串。
若想替换多次出现的字符串,请使用正则
例如:str.replace(/a/g, "f");//替换所有的a为f

split(separator) 根据分隔符分割字符串为数组

substr(start,length) 截取字符串
从哪开始,截取长度

substring(start,stop) 截取字符串
从哪开始,到哪结合(包含开始不包含结束)

toLowerCase() 把字符串转换为小写
toUpperCase() 把字符串转换为大写


3.5.4Array对象(重点)

创建js的数组的三种方式:

var arr = [1,2,3];//创建一个数组长度为3的数组,元素分别为1,2,3

var arr = new Array();数组长度默认为0

var arr = new Array(4); //创建一个数组,数组长度是4,相当于开辟了长度为4的空间,每个元素是undefined。(仅在显示数组时进行处理,undefined为了方便显示变成了空字符串形式,其值本质仍然是undefined)

var arr = new Array(1,5);//创建了一个数组长度为2的数组,数组元素是分别1,5

Array属性:Length 数组的长度

JavaScript和Java中数组的区别:

1、数组的长度是可变的
2、数组元素可以是任意类型

:Array数组如果长度为0,那么如果添加下标时1的元素,那么默认创建1前面的元素,元素值为undefined

Array方法:
concat(arr1,arr2,arr3…..) 连接两个或更多的数组,并返回连接后的结果.对调用的数组没有任何影响。

join(连接符) 转化成字符串返回,对调用的数组没有任何影响。

pop() 删除并返回数组的最后一个元素,如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值

shift() 删除并返回数组的第一个元素,如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值

push(element1,element2,…..) 向数组末尾添加一个或者多个元素,并返回数组新长度

unshift(element1,element2,…..) 向数组开头添加一个或者多个元素,并返回数组新长度

reverse() 颠倒数组中元素的顺序。物理翻转

sort(可选排序函数) 对数组的元素进行排序

排序实现实例:(向sort构造传入该方法)
function sortNumber(a,b)
{
        return a - b
}


3.5.5Date对象

创建Date对象的俩个方式:
var date = new Date(); 前的系统时间
var date = new Date(毫秒值); 设置的时间

toLocaleString() 根据本地的日期格式转化成字符串

getDate() 返回一个月中的某一天

getDay() 返回一周中的某一天(0-6)0代表周日

getMonth() 获取月份(0-11)0代表1月
如果要获取当前月份必须getMonth()+1

getFullYear() 获取年

getTime() 获取毫秒数

setTime() 通过毫秒数设置日期

parse(datestring)
常用解析字符串,返回毫秒数

Date.parse(“2005/12/31 17:07:07”);
Date.parse(“2005/12/31”);
Date.parse("7/8/2013 17:07:07");
Date.parse("Jul 8,2011 17:07:03");
Date.parse(“2012-12-31T07:07:07”);IE10支持


3.5.6Math对象

无需创建,直接Math.方法来进行使用。(内置对象)

Math方法(常用):
random() 随机生成0~1数字
round(x) 对X进行四舍五入


3.5.7RegExp对象(重点)

var reg = new RegExp("表达式");(开发中基本不用)

var reg = /^表达式$/ 直接量(开发中常用)

直接量中存在边界,即^代表开始,$代表结束

/^表达式$/只要有无法成立正则的字符存在,即为false。全部符合为true(检查严格,眼睛不揉沙子)

/表达式/只要有成立正则的字符存在,即为true,全部不符合为false(检查不严格,懒人思想)

RegExp方法:

test(string) 符合规则返回true,不符合返回false

例如: if(reg.test("12345")){ // }else{ // }


3.5.8全局函数(重点)

Global对象(内置对象)

游离的函数,直接拿过来用。

eval() 可以解析字符串,执行里面的javascript的代码(重要)
注:只可以传递原始数据类型string,传递String对象无作用。

isNaN() 判断 是否 不是数字

encodeURI() 编码 (将字符转换成码值)

decodeURI() 解码 (将码值转换成字符)

encodeURIComponent 编码

decodeURIComponent 解码

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

拓展(HTTP协议知识):

URL和URI

URL是统一资源定位器,URL是具体的URI

URI是统一资源标识符

URL是绝对的,资源改变位置,URL就要改变

URI可以是绝对的也可以是相对的。如果是绝对的,资源改变位置,URI就要改变;

如果是相对的,资源位置改变,URI不一定改变。

例如:http://www.baidu.com是URL,不是URI

例如:http://www.baidu.com/a.html 是URL也是URI(严格意义上属于URL)
例如:/a.html 不是URL,而是URI

综上:可以理解为URL肯定包含http协议,URI必须至少包含网页地址(资源名)


posted @ 2015-11-19 19:55  拾叁妖  阅读(122)  评论(0)    收藏  举报