文章目录
- 变量的声明和赋值
- 数据类型
- js的语法结构
- Js中的函数
- Js中的数组
变量的声明和赋值
JS中所有类型变量的声明都使用var
1.先声明变量再赋值
var i;
i = 5;
2.同时声明和赋值变量
var s= “xyr”;
var x, y, z = 10;
3.不声明直接赋值
width=5;
变量可以不经声明而直接使用,但这种方法很容易出错,也很难查找排错,不推荐使用
数据类型
JavaScript 拥有动态类型。相同的变量可用作不同的类型
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。
undefined
Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
var x;
变量 x 没有初始值,将被赋予值undefined
null
表示一个空值,与undefined值相等
一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
alert(null == undefined); //输出 “true”
number
表示一切的数字类型
var num1=23; //整数
var num2=23.0; //浮点数
boolean
true和false
string
一组被引号(单引号或双引号)括起来的文本
var str=“This is a String”;
Function:函数类型
Object:表示所有的引用类型(对象类型) javascript中的对象、数组和null
typeof运算符返回值如下
undefined:变量被声明后,但未被赋值
string:用单引号或双引号来声明的字符串
boolean:true或false
number:整数或浮点数
object:javascript中的对象、数组和null
function: js函数
为什么 typeof 运算符对于 null 值会返回 “Object”。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。
现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
typeof() : 获取数据的类型
instancof关键字: 判断左边类型是否是右边类型的实例
如何判断一个类型是否是一个具体的引用类型?
typeof() : 获取数据的类型
instancof关键字: 判断左边类型是否是右边类型的实例
如何判断一个类型是否是一个具体的引用类型?
给定一个Date类型,我希望输出Date
typeof只能够判断原始数据类型和Object类型,不能够判断具体的引用类型,比如说Date类型
解决方式: 先采用typeof判断返回的是否是object类型,如果是就是使用instanceof关键字判断是否是Date类型
alert(typeof(date) == "object");
if(typeof(date) == "object"){
// 到了这里说明一定是引用类型
if(date instanceof Date){
alert("Date");
}
}
选择语句
if语句和Java里面一模一样
单if/if - else/多重if/嵌套if
switch语句
Java里面的switch语句可以有哪些类型?
byte short int char String(jdk1.7) 枚举
js里面的switch语句可以支持任意类型
循环语句
for、while循环、do-while循环、for-in
var fruit=[ “apple”, “orange”, “peach”,“banana”];
for(var i in fruit){
document.write(fruit[i]+"
");
}
break/continue关键字
js的语法结构
1.顺序结构
2.选择结构
单if
if - else
多重if
嵌套if
switch语句
Java里面的switch语句可以有哪些类型?
byte short int char String(jdk1.7) 枚举
js里面的switch语句可以支持任意类型
3.循环结构
for while do-while
由于JS是客户端语言,所以可以直接使用浏览器调试
调试方法有三种
1.通过document.write()或者alert()调试
2.通过注释调试
3.通过浏览器调试
Chrome开发人员工具调试
停止断点调试
单步调试,不进入函数体内部
单步调试,进入函数体内部
跳出当前函数
禁用所有的断点,不做任何调试
Js中的函数
函数分类:系统函数和自定义函数
系统函数/全局函数
在JS中总有一些函数是不属于任何一个对象或者类的,这样的函数我们就叫做全局函数
全局函数的访问方式: 直接通过方法访问
eval(): 计算JavaScript字符串,并把它作为脚本代码来执行
encodeURI():把字符串编码成URI
decodeURI():解码某个编码的URI
isNaN() 检查某个值是否是数字
如果参数是一个数字,返回false
如果参数不是一个数字,返回true
parseInt() 解析一个字符串为整数
parseFloat() 解析一个字符串为小数
自定义函数
在Java中如何定义函数呢?
访问权限修饰符 返回值类型 方法名(参数类型 变量名1, 参数类型 变量名2…) [throws 异常类名]{
方法体;
return 返回值;
}
在JS里面定义函数(满足方法定义的二要素: 参数列表 方法名)
三种方式
1.采用function关键字来定义
格式:
function 方法名(变量名,变量2...){
方法体;
返回值;
}
2.采用匿名定义的方式来定义函数
3.采用一个内置对象Function来创建(动态函数)
var sum2 = new Function("参数列表", "方法体");
在JS里面调用函数
1.函数调用的时候参数可以传递多个,可以和形参不匹配
注意:
如果实参的个数小于形参的个数,显示NaN
如果实参的个数大于或者等于形参的个数,显示实际结果
其实你传的参数多了都会被一个叫做arguments数组接收掉
2.如果函数重名了,在Java里面叫做重载,在JS里面不存在重载,js会调用最后一个重名的方法
面试题:
函数的重载
什么是重载? --- 发生在同一个类中,方法名相同,参数的个数,顺序,类型不同构成重载
js里面是不存在重载的
如果我想要实现重载的效果,怎么做? (理解即可)
function getMax(a, b, c, d){
// arguments数组接收所有的参数
document.write(arguments.length + "<br />");
if(arguments.length == 1){
return a;
} else if(arguments.length == 2){
return a > b ? a : b;
} else if(arguments.length == 3){
return a > b ? (a > c ? a : c) : (b > c ? b : c);
} else if(arguments.length == 4){
return Math.max(a, b, c, d);
} else {
return 0;
}
}
在JS中的全局和局部变量问题
局部变量和Java是一样的
全局变量: 在定义后所有script标签都能访问
Js中的数组
Java里面定义数组
动态
int[] arr = new int[5];
静态
int[] arr = {20, 30, 40};
int[] arr = new int[]{20, 30, 40};
String[] arr = {"haha","hehe","heihei"};
Student[] stus = new Student[5];
js中定义数组(三种方式)
方式一: var arr = [10, 20, 30];
var arr = ["haha","hehe","heihei"];
方式二: 利用js中的内置对象Array
var arr = new Array(10, 20, 30);
方式三: 使用JS的内置对象(动态)
var arr = new Array(3);
arr[0] = "Hello";
arr[1] = "World";
arr[2] = "Java";
JS中访问数组的元素: arr[i]
在Java里面数组只有一个属性: length,没有方法,所以Java里面有集合
在JS里面数组也有length属性,还有很多方法,当然这些方法来自于内置对象Array
注意:
1.Js中的数组可以存放任意类型的数据
2.在JS里面数组也有length属性,还有很多方法,当然这些方法来自于内置对象Array
4.JS中所有的和数组相关的操作和Java一样,比如
基本操作:
1.求和
2.求最值
3.求平均值
4.倒置
复杂操作
1.排序
选择排序
冒泡排序
2.查找
基本查找
二分查找
针对排好序的数组进行查找,效率更高
练习: 使用js数组对所有元素求和,求最值并且排序
JS中的二维数组
在Java中有二位数组: 本质是一维数组的数组
在Js中定义二维数组
var cityArr = new Array(3);
cityArr[0] = “南昌”;
cityArr[1] = “北京”;
cityArr[2] = “武汉”;
var americanCityArr = new Array(3);
cityArr[0] = "纽约";
cityArr[1] = "休斯顿";
cityArr[2] = "费城";
var countryArr = new Array(3);
countryArr[0] = ["中国", chinaCityArr];
countryArr[1] = ["美国", americanCityArr];