JavaScript是一种脚本语言与Java没有本质联系
1.变量
Java是弱类型语言,变量不用声明也能使用,可以使用var来声明变量。
var a ="变量a";
JavaScript中数据的运算有自动的类型转换:
1.对于减法运算符,因为字符串不支持减法运算,所以系统会自动将字符串转换成数值。(但是如果字符串不是数字的话将会被转化为NaN)
var a ="3.14"
var b =1;
var c = a-b; //c的值将为2.14
2.对于加法运算,因为字符串可以进行加法运算,所以系统会自动将数值转化为字符串。
var a ="3.14";
var b =1;
var c =a+b; //c的值将为“3.141”
JavaScript提供三个函数进行强制类型转换:
toString( a ):将布尔值、数值转换为字符串。
parseInt( a ):将布尔值、字符串转换为数值。
parseFloat( a ):将字符串、布尔值转换成浮点数。
2.变量作用域
不使用var定义的是全局变量。
不在方法里定义的是全局变量。
在方法里定义并且使用var定义的是局部变量。
方法里的变量要调用了方法之后才能使用。
JavaScript里的变量没有块的范围。
同理,在函数内定义的函数称为局部函数,局部函数只能在定义的函数内使用。
function test(){
for(var i=0;i<10;i++){
}
alert(i); //i出了for循环一样可以使用,不过这里的i是局部变量,只能在方法内使用
}
如果局部变量和全局变量使用一样的变量名,那么局部变量会覆盖全局变量。
变量声明会被自动提升到函数的顶部先运行,但是并不代表会赋值。
3.let定义变量,const定义常量
使用let定义的全局变量不会变成window对象的属性。
使用let定义的变量不会提前装载,必须执行到了代码块才会转载。但是依然会有局部变量覆盖全局变量的情况。
使用let定义的变量有块作用域。
var name ="全局变量name";
function test(){
alert(name); //会报错因为name是局部变量, 但是let定义的name不会提前装载,所以报错。
let name ="局部变量"
alert(name);
}
使用const定义常量必须在定义是就指定初始值,并且不允许改变。
4.基本数据类型
1.数值类型:
十六进制以0X开头,八进制以0开头
Infinity表示正无穷
-Infinity表示负无穷大
Infinity与-Infinity之间运算将得到NuN,正无穷总是相等,负无穷也总是相等
除数和被除数同时为0,则得到NuN,NuN不与任何数值变量相等,isNuN(a)可以判断a是否为NuN
正数除0得到正无穷,负数除0得到负无穷
Number类
判断两个浮点数的值是否相等,用差值比较,只要两个浮点数的差值小于一个足够小的数即可认为相等。
2.布尔类型:
3.字符串类型:必须用引号(单/双)括起来
比较两个字符串是否相等直接用==即可
String类
4.undefined类型:已经创建,但是没有初值的变量
5.null类型:某个变量的值为空
5.数组
JavaScript中的数组元素并不要求相同
var a = [1,Hello,0];
var b = [ ];
var c = new Array( );
JavaScript的数组长度可以任意变化,可以随意添加元素,访问数组元素时不会产生越界,访问未赋值的数组元素时,该元素的值为undefined
1.数组作为栈使用:
push( a ):元素入栈,返回入栈后的数组长度
pop( ):元素出栈,返回出栈的数组元素
2.数组作为队列使用:
unshift( a ):元素入队列,返回入队列后的数组长度
shift( ):元素出队列,返回出队列的数组的元素
Array对象的其他方法:
concat( a ,b ,….):为数组添加若干元素,返回得到的数组,但原数组并不改变
sort( ):排序
reverse( ):反转
6.函数
JavaScript中的函数用function关键字定义,并且无须声明形参类型,无须声明返回值类型。
1.
function functonName( name){
}
2.匿名函数:无须指定函数名,即定义一个函数对象,然后将该对象赋值给一个变量,如果匿名函数赋值的变量用var修饰,那么就是一个局部变量,如果没有用var修饰那么就是一个全局变量,那么此时匿名函数就变成了全局函数。
var f =function (name){
document.writeln(‘ Hello’+name);
};
f(' world'); //将输出Hello world
3.。。。。
4. 如果直接输出函数本身,如alert(函数),将会输出函数源代码。
对象创建
**一般有 var a =…; 后面接分号结尾
a = … 不用分号结尾**
1.使用new关键字
2.创建Object对象然后添加属性
3.使用JSON 语法创建对象
var a ={
info : function(){ // 为对象创建方法
...
},
name:1, //属性后面要有,
age:2 //最后一个属性后面没有,
};
函数中的变量以及属性
1.函数中以var修饰的是局部变量———在函数外无法访问
2.函数中以this前缀修饰的变量的是实例属性 ——-如 this.age
应该通过实例对象来访问,不同对象可以不同。
3.函数中以函数名前缀修饰的变量是类属性 ————如 Person.age
只能同过类来访问,实例对象不拥有类属性。
4.JavaScript中可以随时为某个对象实例属性,即直接为某个属性赋值。
函数调用
1.直接调用
调用者.函数(参数1,参数2.。。。)
2.call
函数.call(调用者,参数1,参数2.。。。。。)
3.apply
函数.apply(调用者,[参数1,参数2.。。。。])
7.运算符
1.三目运算符: ? : ;
三目运算符与 if else 的区别是if else 后面可以有多条语句,但是三目运算符是不支持多条语句的
2.逗号
逗号运算符允许将多条表达式放在一起,整个表达式返回最右边的表达式的值
var a = (b=1,c=2,d=3); // a 的值为3
3.void运算符:表示强制没有返回值
var a = void(b=1,c=2,d=3); //a变量没有赋值
4.typeof a:返回某个变量a的数据类型
5.instanceof Object:判断某个变量是否为某个类型的实例
8.异常
- 异常抛出语句: throw new Error( errorString);
- 异常捕捉语句:
try{
statements
}
catch( e )
{
statsments
}
finally //finally块是可以省略的,一旦有finally块,那么finally块总会获得执行
{
statements
}