什么是 JavaScript 语言

JavaScript 是一种轻量级的脚本语言。所谓脚本语言,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的脚本本身不提供任何的 API,都要靠宿主环境(host)提供,所以 JavaScript 只合适嵌入更大型的应用程序环境,去调用宿主环境提供的底层 API

JavaScript 的核心语法部分相当精简,只包括两个部分:基本的语法构造(比如操作符、控制结构、语句)和标准库(就是一系列具有各种功能的对象比如ArrayDateMath等)。除此之外,各种宿主环境提供额外的 API(即只能在该环境使用的接口),以便 JavaScript 调用。以浏览器为例,它提供的额外 API 可以分成三大类。

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

JavaScript 与 Java 的关系

JavaScript 和 Java 的关系。它们是两种不一样的语言,但是彼此存在联系。JavaScript 的基本语法和对象体系,是模仿 Java 而设计的。但是,JavaScript 没有采用 Java 的静态类型。”。JavaScript 语言的函数是一种独立的数据类型,以及采用基于原型对象(prototype)的继承链。这是它与 Java 语法最大的两点区别。另外,Java 语言需要编译,而 JavaScript 语言则是运行时由解释器直接执行。

 

基本概念

语句

javascript以行为单位执行

语句是为了完成某种任务而进行的操作,如
var a = 1 + 3;

表达式

 6+ 3就叫做表达式

语句与表达式的区别

前者主要为了进行某种操作,一般不需要返回值

后者是为了得到返回值,一定会返回一个值

变量

变量是对值的引用,使用变量等同于引用一个值
var a = 1
实际步骤是
var a;
a= 1;

变量提升

由于js引擎的工作方式,先解析代码获取所有被声明的变量,然后再一行一行的执行,这样就造成了,所有变量的声明语句,都会被提升到代码的头部,这就是变量提升

标识符

变量名就是最常见的标识符,规则如:

第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。

第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字0-9。

注意点

  • JavaScript 的变量名区分大小写,A和a是两个不同的变量。
  • 变量的声明和赋值,是分开的两个步骤, 如果只是声明变量而没有赋值,则该变量的值是undefined。undefined是一个特殊的值,表示“无定义”。
  • 可以在同一条var命令中声明多个变量
  • JavaScript 是一种动态类型语言,也就是说,变量的类型没有限制,变量可以随时更改类型
  • 单行注释 //,多行 /* */ 之间
  • 三元运算符? :,可以用于逻辑判断。(条件) ? 表达式1 : 表达式2上面代码中,如果“条件”为true,则返回“表达式1”的值,否则返回“表达式2”的值。

数据类型

概述

  JavaScript 语言的每一个值,都属于某一种数据类型,共有六种.

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

  其中数值,字符串,布尔值成为原始类型的值,undefined和null一般被视为特殊值,对象则为合成类型的值,往往由多个原始类型的值合成

 

typeof运算符

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

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

typeof运算符可以返回一个值的数据类型,可能有以下结果:

(1)原始类型

数值、字符串、布尔值分别返回number、string、boolean。

(2)函数

函数返回function,虽然函数属于对象,但是typeof内部是将函数是返回function

(3)undefined

undefined返回undefined

(4)其他返回object

数组的类型也是object,这表示在JavaScript内部,数组本质上只是一种特殊的对象。
可以用instanceof运算符进行区分

 

一些特殊数值

NAN

 1)含义

NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

5 - 'x' // NaN

上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。

另外,一些数学函数的运算结果会出现NaN。

Math.acos(2) // NaN

Math.log(-1) // NaN

Math.sqrt(-1) // NaN

0除以0也会得到NaN。

0 / 0 // NaN

需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。

typeof NaN // 'number'

(2)运算规则

NaN不等于任何值,包括它本身。

NaN === NaN // false

数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立。

[NaN].indexOf(NaN) // -1

NaN在布尔运算时被当作false。

Boolean(NaN) // false

NaN与任何数(包括它自己)的运算,得到的都是NaN。

Infinity

(1)含义

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

第一个场景是一个表达式的计算结果太大,超出了能够表示的范围,因此返回Infinity。第二个场景是0除以0会得到NaN,而非0数值除以0,会返回Infinity。

Infinity有正负之分,Infinity表示正的无穷,-Infinity表示负的无穷。

非零正数除以-0,会得到-Infinity,负数除以-0,会得到Infinity。

由于数值正向溢出(overflow)、负向溢出(underflow)和被0除,JavaScript 都不报错,所以单纯的数学运算几乎没有可能抛出错误。

Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。

Infinity与NaN进行比较,总是返回false。

(2)运算规则

Infinity的四则运算,符合无穷的数学计算规则。

0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。

Infinity加上或乘以Infinity,返回的还是Infinity。

Infinity减去或除以Infinity,得到NaN。

Infinity与null计算时,null会转成0,等同于与0的计算。

Infinity与undefined计算,返回的都是NaN。

 

布尔值

布尔值:true/false

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

  • 二元逻辑运算符: &&(and), ||(or)
  • 前置逻辑运算符: !(not)
  • 相等运算符: ===, !==, !=
  • 比较运算符: > ,>= ,< ,<=

下面这些值如果转化为布尔值则为false,其他都为true

  • undefined
  • null
  • 0
  • NaN
  • '' ''/' ' (空字符串)

空数组( [] )和空对象( {} )转化为布尔值为true

 

 数据类型转换

 转为字符串:使用 .toString或者String。

1、 .toString()方法:注意,不可以转null和underfined

    //转为字符串-->toString方法

    var bool=true;

    console.log(bool.toString());

    //注意,toString不能转null和underfined.

2、String()方法:都能转

console.log(String(null));

3、隐式转换:num  +  "",当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串

    var a=true;

    var str= a+"";

    console.log('str');

转为数值类型

1、Number():Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN

console.log(Number(true));

2、parseInt():

    var a="12.3px";

    console.log(parseInt(a);

    //结果:12.3.  如果第一个字符是数字会解析知道遇到非数字结束.

    var a="abc2.3";

    console.log(parseInt(a);

    ////结果:返回NaN,如果第一个字符不是数字或者符号就返回NaN.

3、parseFloat():   parseFloat()把字符串转换成浮点数,parseFloat()和parseInt非常相似,不同之处在与parseFloat会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数。

4、隐式转换:

    var str="123";

    var num=str-0;

    console.log(num);

    //结果为数值型;

转换为Boolean():0  ''(空字符串) null undefined NaN 会转换成false  其它都会转换成true

1、Boolean():

console.log(Boolean(2));

2、一些环境中

   var message;

    if(message){};

3、隐式转换:!!

    var str="123";

    var bool=!!str;

    console.log(str);