JS数据结构与算法之JavaScript基础

本文介绍了JavaScript的基本类型、变量作用域、真假值、相等操作符、条件语句、循环、函数及面向对象编程等内容,并探讨了ECMAScript规范及其最新特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、变量

    javaScript的类型有数字、字符串、布尔值、函数和对象。还有undefined和null,以及数组、日期和正则表达式。

js是弱类型语言。相对于强类型语言java、c、c++等在声明变量时需要指定变量的类型而言。在JS中,我们只需要使用var关键字,而不必指定变量的类型。

2、变量作用域

    作用域是指在编写的算法函数中,我们能访问的变量,主要有本地变量和全局变量两种。

在js中要尽量少用全局变量。通常,代码质量可以用全局变量和函数变量来考量。因此,尽可能避免使用全局变量。

3、真值和假值(true/false)

总结:

数值类型转换成布尔值
undefinedfalse
nullfalse
布尔值true是true,false是false
数字+0、-0和NaN都是false,其他都是true
字符串如果字符串是空的(长度是0)就是false,其它都是true
对象true

4、关于相等操作符(==和===)

    (4.1)使用==时,不同类型的值也可以被看作相等。

      为什么呢?why?我自己也很困惑,直到我看到了《学习JavaScript数据结构与算法》(第2版)真的讲的很清楚。下面就让我们来揭开这一神秘面纱吧!

类型(x)类型(y)结果
nullundefinedtrue
undefinednulltrue
数字字符串x ==  toNumber(y)
字符串数字toNumber(x) ==  y
布尔值任何类型toNumber(x) ==  y
任何类型布尔值x == toNumber(y)
字符串和数字对象x == toPrimitive(y)
对象字符串或数字toPrimitive(x) == y

        如果x和有是相同的类型,javaScript会比较它们的值或者对象值。

      其中toNumber 和toPrimitive方法都是内部的,会根据下列表格进行评估。

       toNumber方法对不同类型返回的结果如下:

值类型结果
undefinedNaN
null+0
布尔值如果是true,返回1,false返回0
数字数字对应值
字符串将 符串解析成数字。如果字符串中包含字母,返回NaN,如果是由数字字符组成,转换成数字。
对象Number(toPrimitive(value))

        toPrimitive()返回值类型如下:

  值类型结果
对象 如果对象的valueof方法的结果是原始值,返回原始值。如果对象的toString方法返回原始值,就返回这个值,其它情况都返回一个错误。

    几个例子:

   

为什么会是这样的结果呢?

解析:

  •    首先,布尔值会被toNumber方法转成数字  如第一个console中,会得到packet == 1
  •   其次,用toNumber转换字符串值,因为字符串值包含有字母,所以会被转成NaN,表达式就变成了NaN == 1,所以结果就是false
  •   下面一句console同理  NaN == 0。也会输出false.

(4.2)使用 === 操作符。如果比较的两个值类型不同,比较结果就是false.如果比较的两个值类型相同会根据下列结果判断:

类型(x)类型你(y)结果
 数字x和y的值相同(但不是NaN)true
字符串x和y是相同的字符true
布尔值x和y都是true或falsetrue
对象x和y引用同一个对象true

5、条件语句:if ... else 

 (5.1)可以使用三元操作符替换:

    

使用三元运算符:

(5.2)对于有多个不同的条件的,可以使用swtich语句。

6、循环

     for循环、while()、do...while()

7、函数

在用javaScript编程时,函数很重要。

8、javascript面向对象编程

创建一个普通对象有两种方式:

第一种:var obj = new Object();

第二种:

var obj= {};

在面向对象编程(OOP)中,对象是类的实例。

   function Book(title,page,isbn){

     this.title=title;

    this.page=page;

    this.isbn = isbn;

}

//实例化这个类:

var book = new book('title','page','isbn');

类可以包含函数,可以声明和使用函数:

声明方法有:

Book.prototype.printTitle = function(){

     console.log(this.title);

};

//使用函数

book.printTitle();

也可以直接在类的定义内声明。

注意!!!!!!!!!!

     在原型的例子里,printTitle函数只会创建一次,在所有实例中共享。而在类的定义里声明,则会像前面的例子一样,则每个实例都会创建自己的函数副本。使用原型方法可以节约内存和降低实例化开销。不过原型方法只能声明公共函数和属性,而类定义可以声明只在类的内部访问的私有函数和属性。

9、ECMAScript

 ECMAScript 和 JavaScript有什么关系和异同?

答:ECMAScript是一种脚本语言规范。JavaScript是这个规范的一个实现。JavaScript是一种主要在浏览器中运行的语言,每个浏览器都可以实现自己版本的JS功能。而这个具体实现是基于ECMAScript的。

(9.1):使用Babel.js (https://babeljs.io)是一个JavaScript转译器,也称为源代码编译器。它能够将使用了es6和es7语言特性你的JavaScript代码转换成只使用广泛支持的es5特性的等价代码。

10、es6中的几个知识点:

  (1)使用let 代替var 声明变量

          可以防止同一个代码块中具有相同的变量声明。

          同时let可以限定变量的作用域。这样有利于防止全局变量污染。

  (2)常量

         es6中引入了const关键字。使用const定义的变量是只读的,也就是常量。

  (3)模板字面量

        : 模板字面量用一对 ` 包裹。要插入变量的值只要把变量放在 ${} 就可以了  。

            模板字面量也可以用于多行字符串,再也不需要用\n了。只需要按下键盘enter就可以换一行。

          

    (4)箭头函数

           es6的箭头函数极大地简化了函数的语法。

     (5)函数的参数默认值

          在es6中我们可以默认设置参数的默认值。

     (6)声明展开和剩余参数(...)

          在es5中使用apply()函数把数组转化为参数。而在es6中则是通过展开操作符  ...

           如: 

           var param = [3,4,5];

           console.log(sum(...params))

        在函数中,展开操作符(...)也可以代替arguments,当作剩余参数使用。

        (7)数组解构

          es6中引入了数组解构的概念,可以用来一次初始化多个变量。

          var[x,y] = ['a','b'];

           也可用来进行值的交换。

      (8)类

         (8.1)继承:除了新的声明类的方式,类的继承也有简化的语法。

                   可以使用extends关键字来扩展一个类并继承它的行为。在构造函数中也可以通过super关键字引用父类的构造函数。

        (8.2)使用属性存取器

           使用新的类语法也可以为属性创建存取器函数。

 

 

     

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值