JavaScript基本概念

1.0标识符

  • 第一个字符必须是一个字母、下划线(_)或者一个美元符号($)
  • 其他字符可以是字符、下划线、美元符号或者数字。

1.1变量

初始化的过程就是给变量赋一个值,可以在修改变量的同时修改值的类型,如下:

var message = 'hi';
	message = 100;//有效,但不推荐

如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁

function test(){
	var message = 'hi';//局部变量
}
test();
alert(message);//错误!

例子中省略了var操作符,因而message成为全局变量。只要调用一次test()函数,这个变量就有了定义,就可以在函数外部任何地方被访问到。
但是这种方法不推荐。并且给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。

function test(){
	 message = 'hi';//全局变量
}
test();
alert(message);//"hi"

1.2数据类型

5种简单数据类型:Undefined、Null、Boolean、Number、String
一种复杂数据类型:Object

1.2.1typeof操作符

检测给定变量的数据类型

  • “undefined”——如果这个值未定义
  • “boolean”——如果这个值是布尔值
  • “string”——如果这个值是字符串
  • “number”——如果这个值是数值
  • “object”——如果这个值是对象或null
  • “function”——如果这个值是函数

1.2.2Undefined类型

使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

对于未初始化的变量以及未声明的变量,执行typeof操作符都会返回undefined

var message;//这个变量声明后默认取得undefined值
//下面这个变量并没有声明
//var age
alert(typeof message);//"undefined"
alert(typeof age);//"undefined"

1.2.3Null类型

null表示一个空对象指针

如果定义的变量准备在将来保存对象,那么最好将变量初始化为null,这样只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。

if(car!=null){
//对car对象执行某些操作
}

undefined实际派生在null,因此ECMA—262规定对它们的相等性判断要返回true。需要注意的是这个操作符(==)出于比较的目的会转换其操作数。

alert(null == undefined);//true

1.2.4Boolean类型

可以对任何数据类型调用Boolean()函数,总会返回一个Boolean值。

在这里插入图片描述

1.2.5Number类型

浮点数最高精度是17位小数

 	var a = 0.1;
    var b = 0.2;
    console.log(a + b)//0.30000000000000004
    if (a + b == 0.3) {//不要做这样的测试!
      alert("you got 0.3");
    }
    ——————————————————————————————————————————
     var a = 0.05;
     var b = 0.25;
     console.log(a + b);//0.3

1.2.6String类型

undefined和null没有toString()方法
String()函数能够将任何类型的值转换为字符串(包括undefined和null)

1.2.7Object类型

Object类型是所有它的实例的基础,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

1.3函数

1.3.1理解参数

ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。原因是ECMAScript中的参数在内部是用一个数组来表示的。函数始终接收到的都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。在函数体内部可以通过aguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

function sayHi(name,message){
alert("Hello"+name+","+message);
}
//上面的函数可以像下面这样重写
function sayHi(){
alert("Hello"+arguments[0]+","+arguments[1]);
}

这个例子说明了ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必需的。

再来看一个例子

function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length == 2){
alert(arguments[0]+arguments[1]);
}
}
doAdd(10);//20
doAdd(30,20);//50

还有一点需要注意arguments对象可以与命名参数一起使用,并且它的值永远与对应的命名参数的值保持同步。

function doAdd(num1, num2) {
      arguments[1] = 10;
      alert(arguments[0] + num2);//30
    }
    doAdd(20, 20);

每次执行doAdd()函数都会重写第二个参数,而arguments对象中的值会自动反映到对应的命名参数,所以修改arguments[1]也就是修改了num2的值,结果都变成了10.但是需要清楚它们的内存空间是独立的,只是它们的值会同步。

并且我们需要注意在严格模式下,即使像例子中这样设置了arguments[1]的值为10,num2的值仍是undefined;其次,重写arguments的值会导致语法错误。

1.3.2没有重载

像前面所说ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。其参数是由零或多个值的数组来表示的。而我们知道要实现函数重载需要满足参数个数、参数类型中至少一个不同才可以。但是ECMAScript函数又不介意这些。即所谓的JS没有函数签名,所以无法实现函数重载。

好啦,内容就是这些,如有问题欢迎加入Web前端交流QQ群:827389615,一起讨论学习吖!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值