JavaScript学习一:简介与数据类型

一、导论

1.1.什么是JavaScript语言?

Javascript是一种轻量级的脚本语言(script language,指不具备开发操作系统的能力,只能用来编写控制其他大型应用程序的脚本),是一种嵌入式(embedded)语言,仅可以用来左一些数学和逻辑运算,IO也主要靠宿主(host)环境提供。
最常见的宿主环境就是浏览器,另外还有服务器环境,即Node项目。

Javascript语言是一种“对象模型语言”,各种宿主环境通过这个模型来描述自己的功能和操作接口,从而通过Javascript控制这些功能,它也支持其他编程范式。

JavaScript的核心语法只包括两个部分:基本的语法构造(操作符、控制结构、语句)和标准库,除此之外还有宿主环境提供的额外API。

浏览器提供的API可分为三类:

  • 浏览器控制类:操作浏览器
  • DOM类:操作网页的各种元素
  • Web类:实现互联网的各种功能
    服务器还可以提供操作系统的API等。

1.2.引入方式

Javascript程序不能独立运行,它需要被嵌入HTML中,浏览器才能执行JavaScript代码。引入方式有两种:

  • 行内引入
    直接在行内使用js语句;
<body>
    <input type="button" value="唐伯虎" onclick="alert('秋香姐');">
</body>
  • 内部
    在body里通过script标签包裹js代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript 基础 - 引入方式</title>
</head>
<body>
  <!-- 内联形式:通过 script 标签包裹 JavaScript 代码 -->
  <script>
    alert('学习前端技术!');
  </script>
</body>
</html>
  • 外部
    把js代码写在独立的js文件中,通过script标签的src属性引用,此时标签内的代码就会被忽略。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript 基础 - 引入方式</title>
</head>
<body>
  <!-- 外部形式:通过 script 的 src 属性引入独立的 .js 文件 -->
  <script src="demo.js"></script>
</body>
</html>

1.3. 注释与结束符

单行注释://
多行蛛丝:/* */
结束符:可以使用;也可以使用回车符

1.4. 输出与输入

输出

  • alert()弹窗输出;

  • document.write()页面输出;

  • console.log()控制台输出;
    输入

  • prompt()弹窗输入。

1.5.变量

1.声明:关键字 变量名
letvar都是声明关键字,推荐使用let;
let 是只在let代码块中有效;var是全局变量;
变量提升:JS引擎的工作方式:先解析代码,获取所有被声明的变量,然后再一行一行地运行,所以所有的变量的声明语句,都会被提升到代码头部。

标识符:即变量名或函数名;
命名规则:
不能以数字开头,可以使用$_或者Unicode字母开头;区分大小写。

1.6.语句与运算符

if语句:

if(布尔值)
语句;
if(布尔值){
}

if(布尔值){}
else{}

if(布尔值){}
else if(布尔值){}
else{}

switch结构:

var fruit="apple";
switch(fruit){
case "banana":
//...
break;
case "apple":
//...
break;
default:
//...
}

三元运算符:
用于逻辑判断:

(条件)?表达式1:表达式2

while语句:

while(条件)
语句;

while(条件){}

for循环:

for (初始化表达式; 条件; 递增表达式)
  语句

// 或者

for (初始化表达式; 条件; 递增表达式) {
  语句
}

do……while循环:

do
  语句
while (条件);

// 或者
do {
  语句
} while (条件);

break语句用于跳出代码块或循环;continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。

1.7.标签

JavaScript 语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置。

label:
  语句

可以break label也可以continue label

二、数据类型

2.1.概述

JavaScript共六种数据类型(ES6又新增了一种Symbol类型)。

  • 数值(number):整数和小数(比如1和3.14);
  • 字符串(string):文本(比如Hello World);
  • 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假);
  • undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值;
  • null:表示空值,即此处的值为空;
  • 对象(object):各种值组成的集合。

2.2 获取数据类型

JavaScript 有三种方法,可以确定一个值到底是什么类型。

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法

2.3 Null与Undefined

null是一个表示“空”的对象,转为数值时为0undefined是一个表示"此处无定义"的原始值,转为数值时为NaN

2.4 布尔值

下列运算符会返回布尔值:

前置逻辑运算符: ! (Not)
相等运算符:===!====!=
比较运算符:>>=<<=

转换规则是除了下面六个值被转为false,其他值都视为true。
undefinednullfalse0NaN""''(空字符串)。

2.5 数值

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。
JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
浮点数计算不精确,所以涉及小数计算要格外注意

JavaScript 浮点数的64个二进制位:

  • 第1位:符号位,0表示正数,1表示负数
  • 第2位到第12位(共11位):指数部分
  • 第13位到第64位(共52位):小数部分(即有效数字)
    最大值是2047,正向溢出输出:Infinity(表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity),反向溢出输出:0。JavaScript 提供Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值。
    NaN
    是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
    parseInt方法
    用于将字符串转为整数。parseInt方法第一个参数为字符串,第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。
    parseFloat方法
    用于将一个字符串转为浮点数。
    isFinite方法
    返回一个布尔值,表示某个值是否为正常的数值。
    isNaN方法
    可以用来判断一个值是否为NaN。

2.6 字符串

字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。

  • 字符串只能写在一行,换行就需在每一行的尾部使用反斜杠;
  • 转义:\0 :null(\u0000)\b :后退键(\u0008)\f :换页符(\u000C)\n :换行符(\u000A)\r :回车键(\u000D)\t :制表符(\u0009)\v :垂直制表符(\u000B)’ :单引号(\u0027)" :双引号(\u0022)\ :反斜杠(\u005C);
  • 字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始);
  • length属性返回字符串的长度。

2.7 对象

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

var obj = {
  foo: 'Hello',
  bar: 'World'
};
  • 对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以;
  • 对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用;
var obj = {
  p: function (x) {
    return 2 * x;
  }
};

obj.p(1) // 2
  • 读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符;如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理;
  • 如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量;
  • 查看一个对象本身的所有属性,可以使用Object.keys方法;
  • delete命令用于删除对象的属性,删除成功后返回true(无法删除继承的属性);
  • in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false;
  • for...in循环用来遍历一个对象的全部属性;
for (var i in obj) {}

2.8 函数

函数的声明:

  • function命令:function print(s) { console.log(s);}
  • 函数式:var print = function(s) { console.log(s);};
  • Function构造函数:var add = new Function( 'x', 'y', 'return x + y');
    重复声明后面的声明就会覆盖前面的;
    JavaScript 引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部。
    函数的属性与方法:
  • name属性:返回函数的名字;
  • length属性:函数形参个数;
  • toString方法:以字符串形式返回函数源码;
    函数的参数设置:
  • 参数可以省略不传;
  • 参数为值传递,内部修改不会妨碍外部。
    argument对象:
    arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。
    闭包:
    Javascript有链式作用域,即在函数f1内定义函数f2,f2可以使用f1的变量,f1不可以读f2的变量。

闭包就是函数f2,即能够读取其他函数内部变量的函数。由于在 JavaScript 语言中,只有函数内部的子函数才能读取内部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。闭包最大的特点,就是它可以“记住”诞生的环境,比如f2记住了它诞生的环境f1,所以从f2可以得到f1的内部变量。在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的最大用处有三个,一个是可以读取外层函数内部的变量;另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在;还能封装对象的私有属性和私有方法。

eval:
注入代码

2.9 数组

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。(任何类型的数据,都可以放入数组)

var arr = ['a', 'b', 'c'];

数组本质是对象,键名为0、1、2等整数数字,读取可以使用数字或字符串。
length属性: 返回数组的成员数量;
**in:**检查某个键名是否存在的运算符in,适用于对象,也适用于数组;
**for…in循环:**不仅可以遍历对象,也可以遍历数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值