JavaScript小白学习笔记3——基础知识

本节仍然是语法基础。


数据类型

JavaScript是一种弱类型语言,在定义变量时不需要指定类型。一个变量可以存储任何类型的值,不过这并不等于JavaScript不区分数据类型,只不过在运算时,JavaScript能自动转换数据类型。

在JavaScript中,数据存在两种存储方式。一种是直接存储数据,称为值类型数据,另一种是存储数据的空间地址来间接保存数据,称为引用型数据。不同类型的数据,它们的行为方式存在很大的不同。

使用typeof()可以显示某个数据的类型。

数值

JavaScript包含3种基本数据类型。数值,字符串和布尔型。JavaScript数值是不区分整型和浮点数,所有数值都为浮点数值表示。除了基本的算术运算外,JavaScript还提供了大量的算术函数,以支持复杂的算术运算。这些函数都被包含在Math内置的对象中,成为JavaScript的核心。比如,可以使用.toStirng()函数把某个数值变成字符串类型。

字符串

JavaScript字符串是由Unicode字符、数字、标点符号组成的字符序列。字符串处必须使用单引号或者双引号包括起来。单引号和双引号可以互相包括。所有字符应该在同一行内书写。使用parseInt()和parseFloat()方法可以把字符串转换为数值。

布尔型

布尔型数据仅包括两个值,true和false。它们分别表示逻辑的真和假。布尔值多用在逻辑运算,比较运算中,或者作为条件语句或运算符的条件而使用。要把任何值转化为布尔值,在值的前面加上!!即可。

JavaScript语法系统中拥有很多假值。比如0,NaN,’’,false,null,undefined等等。

null 和 undefined

这是JavaScript中拥有的两个特殊类型的值。一个叫null,一个叫undefined。简单来说,null是Null类型的值。Null类型的值只有一个值,就是null(这都什么玩意),它表示空值。当对象为空,或者变量没有引用任何对象,其返回值就是null。

如果当一个变量的返回值是null,则表明它的值不是有效的对象、数组、数值、字符串和布尔型等。如果使用typeof查看null的类型,会返回object,说明null是一种特殊的对象。

undefined表示未定义的值。当变量还未初始化时,会默认其值为undefined。它区别任何对象、数组、数值、字符串和布尔型。使用typeof检测undefined的类型,返回值为undefined。

引用型数据

除了上面的那些基本数据类型外,JavaScript还提供就那个了3种复杂的数据类型,这些类型的数据一般引用特定位置的值,所以被称作引用型数据。引用型包括:数组、对象和函数等。下面的笔记会详细介绍这些东西。

函数

JavaScript是函数式编程语言,在JavaScript脚本中可以随处看到函数。函数构成了JavaScript源代码的主体。一般来说,要精通JavaScript语言,我们应该精通函数的应用。

定义函数

定义函数的方法有两种。一种是使用function语句声明函数。另一种是通过Function对象来构造函数。

使用function语句生命函数有两种方法,一种是命名函数,一种是匿名函数。

1
2
3
4
5
6
7
function f() {
// do something
}

var f = function() {
//do something
}

命名函数的方法也被称为声明式函数,而匿名函数的方法也被称为引用式函数或者函数表达式。即把函数看作一个复杂的表达式,并把表达式的值赋予变量。

使用Function对象构造函数可以这样写:

1
2
3
var f = new Function(arg1, arg2, func_body);
//call:
f(arg1, arg2);

在Function里面,只有最后一个参数是函数主体,也就是函数执行的部分,前面的参数全部是作为函数使用的参数。

在实际开发中,使用function定义函数要比Function构造方便一些,且执行效率更高。Function一般只用在特定的环境中,一般不使用。

调用函数

调用函数使用小括号运算符来实现,这里的写法和C一致,注意就算没有参数也要带上这个小括号,表明这里用的是函数。

函数的返回值没有限制,它可以返回任意的值。一个函数可以包含多个return语句,但是在调用函数时只有第一个return语句被执行,且该语句后面的表达式的值作为函数的返回值并返回,return后面的语句代码将被忽略掉。

函数参数

与C语言不同,JavaScript对于函数调用时的参数检查并不严谨。在C语言中,函数调用时参数数量不一致会导致编译失败,但是JavaScript允许用户在调用函数的时候使用超出原定参数个数的参数,但是这样多余的参数就会被舍弃,同样的,JavaScript也允许用户使用不足原定参数个数的参数,这样不足的参数就会被自动设置为undefined。

所以,为了预防用户作死而随意传递参数,可以在函数内部加一个参数个数检测的判断,检查形参和实参的个数是否一致。如果不一致可以抛出一个异常,如果一致则正常进行。

1
2
3
4
5
6
7
8
9
10
11
12
13
function add(a, b) {
if (add.length != arguments.length)
//别问,问就是固定搭配
throw new Error("嘤嘤嘤");
else
return a + b;
}
try {
alert(add(2)); // 试图作死的只写一个参数
}
catch(e) {
alert(e.message); // 捕获异常信息
}

函数应用

在实际开发中函数常被作为表达式进行处理。用户可以把函数视为一个值赋给变量,或者作为一个参数传递给另一个函数。这是函数式变成的一个重要特征。

匿名函数就是没有名称的函数,它相当于一个复杂的表达式。当只需要一次性使用函数时,使用匿名函数会更加的有效率。

函数实际也是一种结构复杂的数据,因此可以把它作为值赋给一个其他变量。函数可以作为值进行传递,因此A函数作为B函数的一个参数也是可行的。同样的,函数也可以作为返回值。通过这样的方式可以大大加强函数的应用能力。函数既然可以当作值来使用,因此可以参与到表达式运算中。

闭包函数

闭包是一个拥有许多便利和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包函数就是外部函数被调用后,它的变量不会消失,仍然被内部函数所使用。而且所有的内部函数都拥有对外部函数的访问权限。

看来自己对函数式编程的理解还略有欠缺。抽空专门开一坑学学这个思想吧。

对象

(我为什么要在情人节当天学这个)

创建对象

在JavaScript中,对象是由new运算符生成,生成对象的函数被称为类(或称构造函数,对象类型)。生成的对象被称为类的实例,简称为对象。

1
2
3
4
5
6
var date = new Date();
var ptn = new RegExp("ab+c","i");
var gf = new GirlFriend(); // 这是不存在的好吧

var

访问对象

与C++和Java一样,通过.来访问对象里面的成员或者属性。

对象的属性值可以是简单的值,也可以是函数或对象这种复杂的值。当属性值为函数时,该属性一般称为对象的方法,使用小括号对方法进行访问。

使用关键字this来代表当前对象,这里的this总是指向调用当前方法的对象,当属性值为对象时,就可以设计嵌套对象。可以连续使用.运算符访问内部对象。

访问对象的属性时也可以通过集合运算符[]来进行。此时可以使用字符串下标来表示属性。比如

1
2
3
4
5
6
7
var poi {
x : {
a : 1;
b : 2;
},
};
var a = poi["x"]["a"]; //访问嵌套对象

数组

对象是无序的数据集合,但数组是一组有序的数据集合,它们之间可以相互转换。

定义数组

定义空数组可以使用new。

1
2
3
4
5
6
7
var a = new Array();
var b = new Array(1,2,3,"4",'e'); // 带参数定义,初始化值
var c = new Array(6); // 只有一个参数,只表明限定数组大小
// c数组的所有值目前都是undefined。
var d = Array(); // 定义数组时,new关键字可以省略。
var e = [1,2,3,4,5]; // 这种方式叫做定义数组直接量。
// 使用数组直接量定义数组要比使用Array()函数定义数组要快,且操作也更为方便。

存取数组元素

仍然是使用[]运算符取数组下标。使用数组的length属性(注意不是方法,不需要())可以遍历数组元素。

数组的大小并不是固定的,可以动态增加或删除数组元素。其原理就是更改length的大小,当length的大小改变,数组会根据现在的大小自动调整内部元素,多则删除末尾元素,不足则补足末尾元素为undefined。

使用push()方法可以在数组末尾插入一个或多个元素,pop()则是在末尾删除一个或多个元素。等价于push和pop而作用于头部的方法是unshift()和shift()。

splice()方法是一个通用的删除和插入元素的方法。它可以在数组的指定位置插入或删除元素。它包含三个以上的参数,第一个指定插入的起始位置,第二个指定删除元素个数,第三个开始往后表示插入的具体元素。

数组应用

在开发中有时会用到把字符串劈开为一组数组的方法。或者有时需要把数组合并为字符串。使用Array对象的join方法可以把数组转换为多种形式的字符串。join()方法包含一个参数,用来定义合并元素的连字符。如果不提供参数,则默认以逗号连接每个元素。

即,join()会把数组变成字符串。

使用split()方法可以把字符串劈开为一个数组,它包含两个参数,第一个参数指定劈开的分隔符,第二个参数指定返回数组的长度。

使用reverse()方法将数组逆序,它是就地进行的,不会生成新数组。

sort()方法可以对数组进行排序(要来了),排序的方法通过参数决定,这个参数是一个比较两个元素值的闭包,如果省略参数,则按默认规则进行排序。

concat()方法能够把该方法的参数追加到原数组中,即扩充数组或连接数组,形成一个新的连接数组。

slice()方法将返回数组中指定的子段,也就是一个子数组。它包含两个参数,第一个参数指定的元素是被截取的范围之内,而第二个参数指定的元素则不会被截取(这是什么鬼参数)

换成人话,假设调用slice(a,b),截取的子段就是[a+1,b-1](好奇怪的参数。。。。)


-------------本文结束,感谢您的阅读转载请注明原作者及出处-------------


本文标题:JavaScript小白学习笔记3——基础知识

文章作者:Shawn Zhou

发布时间:2019年02月09日 - 17:02

最后更新:2019年02月17日 - 15:02

原始链接:http://shawnzhou.xyz/2019/02/09/19-02-09-02/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

知识无价,码字不易。对您有用,敬请打赏。金额随意,感谢关心。
0%