语法

区分大小写

`JavaScript`中的变量、函数名都是区分大小写的,`name`,`Name`,`NAME`,不是同一个变量

标识符

标识符就是变量、函数、属性的名字或者函数的参数

注释

注释就是不被计作程序语句,专门用来给程序员自己看的内容
//单行注释
/*
* 多行注释
*
*/

变量

变量就是一个用来存储数据的,声明变量用`var`
//声明一个变量,名字叫name
var name;

如果要定义多个变量,有两种方式可以定义:

//方式一:分开定义
var name;
var age;
var sex;
//方式二:统一定义
var name,age,sex;

给变量赋值

//变量可以在声明的时候赋值
var name = 'John';
//也可以声明以后再赋值
var name;
name = 'John'; //这里的变量值也可以是"John",单引号和双引号都表示字符串
//赋值以后可以修改变量的值
// 方法一
var name = 'John';
name = 'Tome';
console.log(name);//Tome
//方法二
var name;
name = 'John';
name = 'Tome';
console.log(name)//Tome

变量的作用域

function demo(){
    var name = 'John';
}
demo();//调用函数--在函数名后面加括号`()`表示执行该函数
console.log(name);//错误

在上面这段代码中,在函数内部定义了一个局部变量,局部变量在函数运行结束以后就会被销毁,此时在函数外面调用name变量的时候,name这个变量并不存在

function demo(){
    name = 'John';//全局变量
}
demo();
console.log(name); //John

上面这段代码中在函数内声明了一个变量,但是并没有用var声明,此时当函数运行过后,name就是一个全局变量,那么函数运行结束以后,这个变量并没有被销毁,所以在函数体外部依然可以找到name这个变量

前文中提到的全局变量、局部变量、函数体等知识点虽然没有学过,但是可以提前理解一下,后面会做详细介绍
另外,虽然省略var操作符可以定义全局变量,但是不推荐这样做,因为在局部中定义全局变量难以维护

数据类型

在javaScript中有5种数据类型(基本数据类型):Undefined,Null,Boolean,Number,String
Object也是一种数据类型,但是是复杂数据类型,Object本质上是由一对健值对组成。

typeof操作符

typeof用来检测数据类型,返回的结果有:

  • "undefined"---未定义
  • "boolean"---布尔类型
  • "string"---字符串
  • "number"---数字类型
  • "object"---对象或者是null
  • function`---函数类型的数据
typeof null会返回object,这是因为特殊值null被认为是一个空对象
// undefined
var name;
console.log(typeof name); //var定义,结果是string,let定义是undefined
// let,ECMAScript6中定义数据的关键字
// boolean
var flag = true;
console.log(typeof flag); //boolean
// string
var name = 'Json';
console.log(typeof name); //string
// object
var obj = {
    'name': 'Json',
    'age': 20
};
console.log(typeof obj); //object
// function
function add(a,b) {
    return a + b;
}
console.log(typeof add);//function

Undefined类型

Undefined只有一个值,即undefined。对于声明了但是没有初始化的变量,其值就是一个undefined

var name;
console.log(name == undefined);// true
// 这个例子类似于
var name = undefined;
console(name == undefined);// true

Null类型

Null类型是一个只有一个值的数据类型,这个值是null

var person = null;
console.log(typeof person);// object

这里给person赋值为null,表示person是一个空指针的变量,将来指向一个对象。
所以如果要定义一个变量,将来用于保存对象,那么赋初始值的时候要赋值为null。比如下面这个例子:

var person = null;
if(person == null){
    person = {
        "name":"Jerry",
        "age":20
    }
}

Boolean类型

Boolean有两个字面值:truefalse

var flag = true;
var isSuccess = false;
  • 布尔类型的数据类型转换

JavaScript中,可以将所有的数据类型的值转换为布尔类型的值。转换方法如下:

var name = 'Json';
var nameBoolean = Boolean(name);
console.log(nameBoolean);//true

转换规则:

  • String类型,非空为true,空为false
  • Number类型,非0为true,0和NaNfalse
  • Object类型,任何对象为truenullfalse

比如我们可以用字符串的非空作为判断的条件:

var message = "Please send me latter";
if(message){
    send(message);
}
function send(mes){
    console.log("发送消息---消息内容为"+mes);
}

Number类型

关于Number类型的数据,我们不去研究八进制、十六进制,这些类型的数据会给我们的学习带来不小的负担,另外数值的范围我们也不去研究。

数值转换

关于数值转换,需要学习三个函数:Number()parseInt()parseFloat()

  1. Number():用于将任何数据类型转换为数值类型的数据;
  2. parseInt():将字符串类型的数字转换为int类型的数据;
  3. parseFloat:将字符串类型的数据转换为float类型的数据。
  • Number():

    • 如果是Boolean类型的数据,true被转换为1,false被转换为0;
    • 如果是数字,只是简单的传入和返回;
    • 如果是null,返回0;
    • 如果是undefined返回的是NaN
    • 如果是字符串

      • 如果是'123',返回123,如果是'0123'返回的是123;
      • 如果是十六进制的数据,则会返回对应的十进制的值;
      • 如果是空字符串,则返回0
var number1 = Number('John');//NaN
var number2 = Number('');//0
var number3 = Number('090');//90
var number4 = Number(true);//1
var number5 = Number(false);//0
var number8 = 12+'number';//NaN
  • parseInt():

    var number = parseInt('070');//56
前面的Number()则是将'070'转换成了70,而parseInt()则是将070转换成了56,这是因为parseInt()函数将'070'当作是八进制的一个数值进行转换
为了消除这种困惑,在parseInt()函数中还有另一个参数作为补充,第二个参数可以指定被转换值按照什么类型的值去转换:
var num1 = parseInt("10", 2);//2 (按二进制解析)
var num2 = parseInt("10", 8);//8 (按八进制解析)
var num3 = parseInt("10", 10);//10(按十进制解析)
var num4 = parseInt("10", 16);//16(按十六进制解析)
  • parseFloat()parseInt()类似,是从第一个字符开始解析,解析到字符串末尾或者遇到第二个小数点为止,比如’12.34.32’解析的结果就是12.34

下面的例子中,标记有(了解)的可以不做重点关注:

var num1 = parseFloat("1234blue");//1234 (整数) 
var num2 = parseFloat("0xA"); //0 (了解)
var num3 = parseFloat("22.5");//22.5 
var num4 = parseFloat("22.34.5");//22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000 (了解)

String类型

String类型的数据,简单来说,就是由双引号("")和单引号('')包裹起来的都是String类型的数据。
在这里,单引号和双引号都可以用来表示字符串,要注意一点,引号要对称:

String name = 'Jhon";//前后引号不一致,错误

字符串的拼接

String name = 'Tom';
String subString = 'name:'+ name;
// 如果是数字类型的数据和字符串拼接,那么会默认将数字转换成字符串,然后拼接
String stringNumber = 1 + 'string';

字符串转换

  • toString()方法

toString()默认是以十进制的方式去转换的,但是我们可以通过添加参数来规定转换的方式

var num = 10;

console.log(num.toString());// "10"--十进制

console.log(num.toString(2));// "1010"---二进制

console.log(num.toString(8));// "12"---八进制

console.log(num.toString(10));// "10"---十进制

console.log(num.toString(16));// "a"---十六进制
  • String()方法

String()方法的转换规则与toString()方法基本类似,这是因为它的转换规则:

  1. 如果被转换的值有toString()方法,就调用toString()方法;
  2. 如果被转换值是null,返回null
  3. 如果被转换值是undefined,返回undefined
var value1 = 30;

var value2 = null;

var value3 = undefined;

console.log(String(value1));//"30"

console.log(String(value2));//"null"

console.log(String(value3));//"undefined"

Object类型

Object类型的数据其实就是一对健值对,健值对就是一个属性对应一个值,对象的创建方式可以有两种,一种是用关键字new创建,一种是用花括号创建:

第一种

var obj = new Object();//创建一个对象
// 给对象添加属性和值
obj.name = 'Tom';
obj.age = 20;
// 取对象中的值
console.log(obj.name);// 'Tom'
console.log(obj.age);// 20

第二种

var obj = {
    "name": "Tom",
    "age": 20
}
// 这里是两种取值方式
console.log(obj.name); //'Tom'
console.log(obj.age); //20
console.log(obj['name']); //'Tom'
console.log(obj['age']); //20
  • 下面的这些知识点可以作为了解,后面会细讲

    Object 的每个实例都具有下列属性和方法:

    • constructor:保存着用于创建当前对象的函数。构造函数(constructor) 就是 Object()
    • hasOwnProperty(propertyName):检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty("name"));
    • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型;
    • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定;
    • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
    • toString():返回对象的字符串表示;
    • valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同。

参考文献:

《JavaScript高级程序设计》

DreamFightter
5 声望0 粉丝