JavaScript基础语法

JavaScript基础语法

一、语句和解释
语句:JS执行单位是行(line),一行就是一个语句,以分号为结尾,不推荐一行写多个语句。表达式后不需要分号,否则会被判断为一个语句产生无意义语句。
注释:单行注释:// 多行注释 /* */ 单行注释
二、标识符和关键字
标识符:
1.以字母,数字,下划线,美元符,中文组成。
2.关键字,保留字不允许
3.不能以数字开头
4.严格区分大小写
三、变量的声明
变量是一块有名字的内存空间,可以存储数据,也可以将数据从中取出。
1.变量的声明
JS是弱类型语言,只需要用var就可以声明所有数据类型的变量
var msg=“你好” ; var max=123;
2.声明注意点
1.只声明未赋值,其值为defined
var max; 其中变量的值是undefined
2.不声明,直接使用,会报错
max=123;
3.一个var可以同时声明多个变量
4.重新声明一个存在的变量是无效的
5.用var重新声明一个已经存在的变量并赋值,原来的值会被覆盖
var box = 10 var box = 25
6.JS是弱类型的动态语言,可以赋值多个类型的值。
var box = ‘hello world’ box = 122
3.变量提升
JS引擎是先解析代码再从上往下执行,就是先把用var声明变量的语句都提上到代码头部,叫做变量的提升。

console.log(msg);
var msg = “so easy”;
//变量提升,相当于下面的代码
var msg;
console.log(msg);
msg = “so easy”;
说明: 最后的结果是显示 undefined,表示变量 msg 已声明,但还未赋值。

四、数据类型
JS虽是弱类型的语言,但仍有数据类型。
Number:整数和小数
String:字符串
undefined:未赋值此处没有任何值
null:此处应有一个值,但现在是空。
boolean:布尔型,true和false
Object:复杂数据类型
对象
数组
函数
1.typeof判断变量和字面量的的数据类型,返回如下字符串
Number
String
boolean
Object 对象或null
unfined 未定义
function 函数
①函数虽然不是数据类型但仍可以用typeof判断,函数属于对象。
2.undefined
表示此处没有值
出现的情况:
1.只声明未初始化
2.函数的形参没有给予实参时为undefined
3.函数无返回值,默认返回undefined
3.null
此处为空值,可以表示一个对象的空引用。
注意:1.用typeof判断返回为Object
2.undefined派生自null,等值判断(==)为true,即未初始化的变量和值为null的变量相等。
4.布尔类型
true和false。常用做判断和循环的条件。
5.数值型
1.整型和浮点型都是用64位浮点数储存的,1.0和1相等,浮点数和整数运算,结果保留整数。浮点数有精度损失,判断时最好不要用。
2.浮点数存储时,能转化为整数型就转为整数型。
3.对于过大、过小的数用科学计数法
4.Infinity和-Infinity
超出范围正无穷和负无穷。
5.isFinite()判断是否超出范围,true没超出,false超出了
6.NaN非数值
NaN是一个特殊的值,它不等于任何值包括它本身。
NaN与任何数计算都是NaN.

如:将字符串解析成数字出错的场合。
console.log(parseInt(“abc”));//parseInt 方法将字符串解析为数值,但若无法解
析,返回 NaN

isNaN判断一个值是不是数字,true不是数字,false是数字

console.log(isNaN(12));//false
console.log(isNaN((“abc” + 1)));//true

6.字符串
使用’‘和""括起来,用+作为连接符。
转移字符: /0 没有值
/t 制表符 /n 换行符 /’ 单引号 /" 双引号
7.对象
对象是一组数据和功能的集合。
typeof window//object
typeof {}//object
typeof []//object
typeof null//object
可以用instanceof判断一个数据是否是某个对象的实例
{}表示用对象字面量方式式定义的对象,空花括号表示定义包含默认属性和默认方法的对象。

var o = {};
var a = [];
o instanceof Object// true,Object 是对象构造
a instanceof Array // true,Array 是数组对象

8.函数
function f() {}
typeof f //function
五、运算符
六、类型转换
1.自动类型转换
2.函数转换parseInt和parseFloat
两者都是操作字符串的,其他类型数据会返回NaN。
parseInt先判断第一个字符是不是数字,如果不是结束返回NaN,如果是则继续判断直到遇到非数字字符。

parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转
换成整数。基是由 parseInt()方法的第二个参数指定的
parseInt(“AF”, 16); //returns 175
parseInt(“10”, 2); //returns 2
parseInt(“10”, 8); //returns 8
parseInt(“10”, 10); //returns 10
如果十进制数包含前导 0,那么最好采用基数 10,这样才不会意外地得到八进制的值
parseInt(“010”); //returns 8
parseInt(“010”, 8); //returns 8
parseInt(“010”, 10); //returns 10

parseFloat判断的逻辑一样,但若是有两个小数点,则第一个小数点有效,将第二个小数点前的字符串转换为数字。

parseFloat(“1234blue”); //returns 1234.0
parseFloat(“0xA”); //returns 0
parseFloat(“22.5”); //returns 22.5
parseFloat(“22.34.5”); //returns 22.34
parseFloat(“0908”); //returns 908
parseFloat(“blue”); //returns NaN

3.显式类型转换
每个数对象都可以调用toString()方法将内容转化为字符串。
Number
的toString()可以把数字以指定的进制转化为字符串,默认为十进制。
toFixed()可以根据指定小数点后的尾数四舍五入,转化为字符串。
JS 为 Number、Boolean、String 对象提供了构造方法,用于强制转换其他类型的数据。此时操作的是整个数据,而不是部分

Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( “5.6.7 “) NaN
Number(new Object())NaN
Number(100) 100
Boolean(””); //false – empty string
Boolean(“hi”); //true – non-empty string
Boolean(100); //true – non-zero number
Boolean(null); //false - null
Boolean(0); //false - zero
Boolean(new Object()); //true – object

String()方法最简单可以将任何数据转换成字符串,只需要调用它们的toString()方法就可以将其转换为字符串。
强制转换成字符串和调用toString()方法的唯一不同在于,null和undefined值可以强制类型转换生成字符串而不引发错误。

七、块
JS中常把几个相关的语句方法放在区块中,但是区块不构成单独的作用域,与块外仍处于一个作用域。
八、控制语句
===严格相等运算符,不会发生强制类型转换
相等运算符,会发生强制类型转换,例如1.01
九、数组
数组定义的三种方式:

var arr=[值 1,值 2,值 3]; //隐式创建
var arr=new Array(值 1,值 2,值 3); //直接实例化
var array=new Array(size); //创建数组并指定长度
1.基本操作
数组的长度可以通过 length 属性来获取,并可以任意更改
数组名.length
数组名.length = 新长度
数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界。
2.数组的遍历
JS 提供三种遍历数组的方式:

普通 for 循环遍历
for(var i=0; i<=数组.length-1; i++){
}
如:
for(var idx=0;idx<arr.length;idx++){
console.log(arr[idx]);
}

for…in
for(var 下标(名称任意) in 数组名){
数组名[下标]是获取元素
} //下标(名称任意)
如:
for(var idx in arr){
console.log(arr[idx]);
}

forEach
数组名.forEach(function(element,index){
}) // element(名称任意):元素,index(名称任意):下标
如:
arr.forEach(function(elem,idx){
console.log(idx+"–>"+elem);
});

forEach
数组名.forEach(function(element,index){
}) // element(名称任意):元素,index(名称任意):下标
如:
arr.forEach(function(elem,idx){
console.log(idx+"–>"+elem);
});

3.数组提供的操作方法
Array对象为我们提供了一些操作数组的方法

push 元素插到数组最后
unshift 元素添加到数组最前
pop 删除最后一个元素
shift 删除第一个元素
reverse 翻转数组
join 数组转换成字符串
indexOf 数组元素索引
slice 截取数组,原数组不发生改变
splice 剪接数组,数组变化,可以实现前后删除效果
concat 数组合并

var arr = [‘1’,‘a’,5,‘3’];
console.log(arr);
arr.push(10);
console.log(arr);
arr.unshift(‘b’);
console.log(arr);
arr.pop();
console.log(arr);
arr.shift();
console.log(arr);
arr.reverse();
console.log(arr);
console.log(arr.join(’’’));
console.log(arr);
console.log(arr.indexOf(‘a’));
console.log(arr.slice(2,5));
console.log(arr);
arr.splice(1,1,‘一’,‘二’);
console.log(arr);
var arr1 = [0,‘100’];
console.log(arr.concat(arr1))
console.log(arr)
console.log(arr1)
console.log(arr1.concat(arr))

十、函数
函数,即方法。是一段预先设置具有一定功能的代码块,可以反复调用,根据不同的参数,返回不同的值。函数也是对象。
1.函数的三种定义方式:
函数声明语句
function 函数名([参数列表]){}
函数定义表达式
var 变量名=function([参数列表]){}
Function构造函数
Function 构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面
的参数则列举出了新函数的参数

var add = new Function(‘x’,‘y’,‘return (x + y)’);
// 等同于
function add(x, y) {return (x + y);}
add()

2.函数名的提升
JS可以将用function声明的函数提升到代码头,所以function声明语句可以先调用后声明。
但是赋值语句定义的函数JS就会报错。
3.函数的参数、调用和return语句
 实参可以省略,那么对应形参为 undefined
 若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。
函数的调用
常用调用方式: 函数名([ 实参]);
存在返回值可以变量接收,若接收无返回值函数则为 undefined。
匿名函数立即调用
(1)匿名函数:function ([参数]){}
(2)调用:(function ([形参]) {})([实参]);
在函数只被使用一次的情况下可以使用这种方式,简便省事
return 语句
函数的执行可能会有返回值,需要使用 return 语句将结果返回。return 语句不是必需的,
如果没有的话,该函数就不返回任何值,或者说返回 undefined。
作用:在没有返回值的方法中,用来结束方法。
有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。

4.arguments对象和函数的方法及属性
arguments 对象中存放了调用该函数时传递的实际参数。由于 JavaScript 允许函数有不
定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数,这就是 arguments
对象的由来 。

函数中可以使用 arguments 对象来获取实参
function test(a, b, c){
var len = arguments.length
console.log(len)
for(var i=0; i<len; i++){
console.log(arguments[i]);
}
}
test(1,20)

函数本身是对象,也有一些属性和方法

函数名.name 函数名称
函数名.length 形参的个数
函数名.toString() 返回函数的源码

  1. 函数的作用域

函数作用域:全局(global variable)和局部(local variable)
1)全局变量与局部变量同名问题
var box =1; //全局变量
function display(box){
var box=3; //此处 box 与全局变量 box 没有关系,这里的 box 为传递的参数,相当于
新声明的局部变量
var b = 2; //局部变量
console.log(“box–>”+box);
}
display();
//b 不能访问
console.log(“b–>”+b);
2)在函数中定义变量时,若没有加 var 关键字,使用之后自动变为全局变量
function fun(){
a = 100;
}
fun();
alert(a);
3)变量作用域提升
function foo(x) {
if (x > 100) {
var tmp = x - 100;
}
}
//等同于
function foo(x) {
var tmp;
if (x > 100) {
tmp = x - 100;
};
}

6.闭包
闭包是定义在函数内部,是函数内部和函数外部的一座桥梁。
作用:1.外部读取函数内部的局部变量
2. 让这些变量始终保持在内存中,以及还可以避免变量名冲突问题。
7.内置对象
String:
◦ charAt(idx):返回指定位置处的字符
◦ indexOf(Chr):返回指定子字符串的位置,从左到右。找不到返回-1
◦ substr(m,n):返回给定字符串中从 m 位置开始,取 n 个字符,如果参数 n 省略,
则意味着取到字符串末尾。
◦ substring(m,n):返回给定字符串中从 m 位置开始,到 n 位置结束,如果参数 n 省
略,则意味着取到字符串末尾。
◦ toLowerCase():将字符串中的字符全部转化成小写。
◦ toUpperCase():将字符串中的字符全部转化成大写。
◦ length: 属性,不是方法,返回字符串的长度。
Math:
◦ Math.random()
◦ Math.ceil() :天花板 大于最大整数
◦ Math.floor() :地板 小于最小整数 String

		Date:
			//获取
			◦ getFullYear()年, getMonth()月, getDate()日,
			◦ getHours()时,getMinutes()分,getSeconds()秒
			//设置
			◦ setYear(), setMonth(), …
			◦ toLoacaleString()
			说明:
			1.getMonth():得到的值:0~11(1 月~12 月)
			2.setMonth():设置值时 0~11
			3.toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。
7.对象
对象的创建
			JS 创建自定义对象,主要通过三种方式:
				字面量形式创建对象、
				通过 new Object 对象创建 、
				通过 Object 对象的 create 方法创建对象
			
			字面量形式创建
				var 对象名 = {};//创建一个空的对象
				var 对象名 = {键:值,键 2:值 2,...}
				
			通过 new Object 对象创建
				var 对象名 = new Object();
				
			通过 Object 对象的 create 方法创建对象
				var 对象名 = Object.create(null); // 创建空模板的对象
				var 对象名 = Object.create(对象); // 以指定对象为模板创建对象
				
		序列化和反序列化
			序列化对象,将对象转为字符串
			JSON.stringify(object)
			反序列化,将一个 Json 字符串转换为对象。
			JSON.parse(jsonStr)
eval()
			可借助 eval()动态函数,将参数字符串解析成 js 代码来执行,只接受原始字符串作为参数
			可将 json 串转为 json 对象
			1)第一种解析方式:得到的 json 对象名就是 jsonObj
				eval("var jsonObj = " + jsonStr);
			2)第二种解析方式:对象中有多个属性
				var jsonObj = eval("(" + jsonStr + ")");
				由于 json 是以{ }的方式来开始以及结束的,在 eval 中会被当成一个语句块来处理,故必须强制将它转换成一种表达式。
				加上圆括号是使 eval 函数在处理时强制将括号内的表达式转化为对象而不作为语句来执行。
			3)第二种解析方式:对象中只有一个属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值