JavaScript基本语法及数据类型(一)

JavaScript 简介

JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script language),指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”

从语法角度看,JavaScript 语言是一种“对象模型”语言,运行时由解释器直接执行

两个部分:基本的语法构造(比如操作符、控制结构、语句)和标准库(就是一系列具有各种功能的对象比如Array、Date、Math等) API(即只能在该环境使用的接口)

浏览器:
浏览器控制类:操作浏览器
DOM 类:操作网页的各种元素
Web 类:实现互联网的各种功能

一、基本语法

1.1语句

语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内

2.变量

2.1变量基本概念

变量是对“值”的具名引用。变量就是为“值”起名,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名。

// An highlighted block
var a = 1;

JavaScript 的变量名区分大小写,A和a是两个不同的变量。
如果只是声明变量而没有赋值,则该变量的值是undefined。undefined是一个特殊的值,表示无定义

可以在同一条var命令中声明多个变量。
使用var重新声明一个已经存在的变量,是无效的,但是,如果第二次声明的时候还进行了赋值,则会覆盖掉前面的值。

2.2变量提升

JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部

2.3标识符

标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名

命名规则:

第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9。

中文是合法的标识符,可以用作变量名。

保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

2.4注释

一种是单行注释,用//起头;另一种是多行注释,放在//之间

< !–和-- >也被视为合法的单行注释

2.5区块

JavaScript 使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。

对于var命令来说,JavaScript 的区块不构成单独的作用域(scope)

3、条件语句

** if、switch**
if (布尔值)
语句;

// 或者
if (布尔值) 语句

switch语句内部采用的是“严格相等运算符”===

if (m === 3) {
  // 满足条件时,执行的语句
} else {
  // 不满足条件时,执行的语句
}

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

三元运算符(即该运算符需要三个运算子)?:,也可以用于逻辑判断。

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

3.1循环语句

** while 循环**

while (条件)
语句;

// 或者
while (条件) 语句;

while语句的循环条件是一个表达式,必须放在圆括号中。代码块部分,如果只有一条语句,可以省略大括号,否则就必须加上大括号。

while (条件) {
语句;
}

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

// 或者

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

do…while循环与while循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。
do
语句
while (条件);

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

3.2break 语句和 continue 语句

break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。

break语句用于跳出代码块或循环,可用于while for 循环

continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。


while (i < 100){
  i++;
  if (i % 2 === 0) continue;
  console.log('i 当前为:' + i);
} ```
上面代码只有在i为奇数时,才会输出i的值。如果i为偶数,则直接进入下一轮循环。

###   3.3标签(label)
用于跳转到程序的任意位置
label:
  语句
** 与break语句和continue语句配合使用,跳出特定的循环**

满足条件时,直接跳出双层循环
top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }

二、数据类型

1、数据类型

JavaScript 的数据类型,共有七种。

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

    对象则称为合成类型

  • 狭义的对象(object)
  • 数组(array)
  • 函数(function)
  • 2、typeof 运算符

    确定一个值到底是什么类型。

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法
  • 函数返回function
    typeof可以用来检查一个没有声明的变量,而不报错,没有用var命令声明,返回undefined

    null的类型是object,这是由于历史原因造成的

    3、null, undefined 和布尔值

    在if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等。

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

    null表示空值
    undefined表示“未定义”

    布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示

    会返回布尔值:

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

    以下六个值会转为false
    undefined
    null
    false
    0
    NaN
    ""或’’(空字符串

    空数组([])和空对象({})对应的布尔值,都是true

    4、数值

    4.1、整数和浮点数

    JavaScript 内部,所有数字都是以64位浮点数形式储存

    某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数

    注:浮点数不是精确的值
    0.1 + 0.2 === 0.3
    // false

    0.3 / 0.1
    // 2.9999999999999996

    (0.3 - 0.2) === (0.2 - 0.1)
    // false

    4.2、数值精度

    JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。

    第1位:符号位,0表示正数,1表示负数
    第2位到第12位(共11位):指数部分(决定数值大小)
    第13位到第64位(共52位):小数部分(即有效数字)(有效数字,决定了数值的精度。)

    精度为即-2^53到253

    简单来说:JavaScript 对15位的十进制数都可以精确处理。

    数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。

    如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,即 JavaScript 无法表示这么大的数,这时就会返回Infinity。负向溢出”,这时会直接返回0

    Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值。

    4.3、数值的表示法

    字面形式直接表示,比如35(十进制)和0xFF(十六进制)。

    数值也可以采用科学计数法表示

    会自动将数值转为科学计数法表示
    (1)小数点前的数字多于21位。
    (2)小数点后的零多于5个。

    JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

    十进制:没有前导0的数值。
    八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
    十六进制:有前缀0x或0X的数值。
    二进制:有前缀0b或0B的数值。

    4.4、特殊数值

  • 正零和负零
  • 唯一有区别的场合是,+0或-0当作分母,返回的值是不相等的。
    面的代码之所以出现这样结果,是因为除以正零得到+Infinity,除以负零得到-Infinity

  • NaN **数据类型依然属于Number** NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。 5 - 'x' // NaN Math.acos(2) // NaN Math.log(-1) // NaN Math.sqrt(-1) // NaN 0除以0也会得到NaN。
  • NaN不等于任何值,包括它本身
    数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立。
    NaN与任何数(包括它自己)的运算,得到的都是NaN。

  • Infinity
  • Infinity表示“无穷”,一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

    Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。
    Infinity与NaN比较,总是返回false。

  • Infinity的四则运算,符合无穷的数学计算规则。
  • 0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity
  • Infinity加上或乘以Infinity,返回的还是Infinity。
  • Infinity减去或除以Infinity,得到NaN。
  • Infinity与null计算时,null会转成0,等同于与0的计算。
  • Infinity与undefined计算,返回的都是NaN。
  • 4.5、相关的全局方法

    1、parseInt()

    parseInt方法用于将字符串转为整数。
    如果字符串头部有空格,空格会被自动去除。
    parseInt的参数不是字符串,则会先转为字符串再转换

    parseInt(1.23) // 1

    返回值:十进制整数/NaN。

    如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分

    如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN

    parseInt('15e2') // 15
    parseInt('15px') // 15
    parseInt('+') // NaN
    parseInt('+1') // 1
    

    如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析。

    进制转换
    默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制

    parseInt('1000') // 1000
    // 等同于
    parseInt('1000', 10) // 1000
    
    

    如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。

    如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回NaN。
    parseInt(‘1546’, 2) // 1
    parseInt(‘546’, 2) // NaN

    2、parseFloat()

    parseFloat方法用于将一个字符串转为浮点数。
    如果字符串符合科学计数法,则会进行相应的转换。

    包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。

    会自动过滤字符串前导的空格
    parseFloat(’\t\v\r12.34\n ') // 12.34

    如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN
    会将空字符串转为NaN

    3、isNaN()

    判断一个值是否为NaN。
    isNaN(NaN) // true
    isNaN(123) // false

    只对数值有效,如果传入其他值,会被先转成数值,先使用Numbe函数r

    isNaN(‘Hello’) // true
    // 相当于
    isNaN(Number(‘Hello’)) // true

    对于字符串、对象和数组,isNaN返回true
    对于空数组和只有一个数值成员的数组,isNaN返回false

    使用isNaN之前,最好判断一下数据类型
    判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。

    function myIsNaN(value) {
    return value !== value;
    }

    4、isFinite()

    isFinite方法返回一个布尔值,表示某个值是否为正常的数值。

    除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值