js 数据结构与算法 学习


js数据结构与算法,自主学习中。(持续更新~(ノω<。)ノ))☆.。

目的:熟悉js语言,了解其运行过程,以此能熟练使用js的语法,语法糖完成项目任务,拓宽思路,优化代码。

js-es6

主要功能:
let,const 声明变量。
模板字面量。
箭头函数。
函数参数默认值。例:function sum(x=1,y=2,z=3) {return x+y+z} sum(4,2) // 9
声明展开和剩余参数。[...a]
增强的对象属性。 let [a,b] = [1,2]; [b,a] = [a,b] //a = 2,b = 1
例:let [x,y] = [1,2] let obj = {x,y} // {x:1,y:2}
简写方法名。 let obj = { a:1,b() {} }

js-真假值转换

undefined:false
null:false
0,+0,-0,NaN:false
''(字符串长度为0):false
对象:true

关于 == 与 ===
== : 如果x与y类型相同,则使用equals方法比较这两个值。
如果x与y类型不同,则使用toNumber,toPrimitive这二个js内部方法,重新估值,再比较
toNumber方法: 对undefined,返回NaN. 对null,返回+0. 对布尔值,true返回1,false返回+0. 对数,返回数对应的值。对字符串,有字母返回NaN,纯数字返回对应值。
toPrimitive方法:如对象的valueOf方法结果是原始值,返回原始值。如对象的toString方法返回原始值,就返回这个值。其他返回一个错误。

例子: 'abc' == true // false => NaN == 1 => false
'abc' == false // false => NaN == 0 => false

===: 先比较两个值,类型不同则返回false。 如果相同,则:
对于数字,x = y ,返回true(NaN返回false).
对于字符串,x=y, 返回true.
对于布尔值,相同则返回true.
对于对象,x,y引用同一个对象则为true.(需要指向同一个地址)

js-面向对象编程

js中,创建的所有类,如:Stack, Set, LinkedList, Dictionary, Tree, Graph等,都是JS对象。

面向对象编程(OOP)中,对象是类的实例。一个类,定义了对象的特征。我们会创建更多的类
来表示算法和数据结构。
es5:
例:声明一个类(构造函数)表示书。
function Book(title,pages,isbn) {
this.title = title;this.pages = pages; this.isbn = isbn}
接着实例化这个类(构造函数)
var book = new Book('title1',12,'isbn')
console.log(book.title,book.pages,book.isbn)// 书名,书页数,新书名

类可以包含函数(方法)。可以声明和使用函数/方法。
方法1 prototype方法声明,节约内存和降低实例化开销。不过只能声明public函数和属性。
Book.prototype.printTitle = function() {console.log(this.title)}
book.printTitle()
方法2 类定义声明,只在类的内部访问的private函数和属性。
function Book() {this.printTitle = function() {console.log(this.title)}

es6:
引入了class关键字(需要 constructor)。
例: class Book{
constructor(title,pages,isbn) {
this.title = title;
this.pages = pages;
this.isbn = isbn
}
printIsbn() {
console.log(this.isbn)
}
}