0%

【Js学习笔记】(1)温故知新

暑假了,总得找点事情做。

在配置路由器的偶然之间,查看了该管理页面的源代码,发现了一些新奇的东西——某些关于密码的函数居然显式地给出来了,那样是不是就可以直接破解掉...呵呵,再想了想,果然是想当黑客的心出来了,毕竟人家用了数据库,自然是将请求发给服务器然后在服务器端判断请求是否有效再给你返回跳转页面的,似乎SQL注入技术就是伪造了这些请求,从而实现黑客攻击...

不过,还是由这几段函数说起吧。它们用js写的,凭着大一学了点皮毛,还是能够大部分看得懂的。然而,突然兴起,就想进一步学习,刚好之前看了廖雪峰的新教程出来了,所以决定来进一步学习下。

好啦,正题开始。 ## 一、基本语法

JavaScript的语法很易上手,尤其是经常游走于各种语言的人,这样的一门语言是没有什么大的问题。总结下特点:

  • 语句和结构与c/c++相似;
  • 动态数据结构;
  • 支持面向对象;
  • 常服务于浏览器,但是之前写过Unity3D,也可以作脚本语言;
  • 容易被人觉得是玩具的语言,其实精髓还是蛮多的。

二、支持数据类型

Number:整型、浮点、NaN和Infinity(大小写注意);

字符串:用''或""将文本括起来;

布尔类型;

null和undefined:空和未定义

数组:[元素0,元素1,元素2...];下表从零开始,元素之间用,分隔,元素包括任意数据类型,是重要的数据类型。

对象:类似与c中的struct结构体类型;举个栗子:

1
2
3
4
5
6
7
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
zipcode: null
};
注意结尾的分号。

关于声明变量的问题:

在设计当初,声明时并不需要使用特定的语句,简单地在代码任意位置申明变量都可以。但是这显然不安全,后来出现了strict模式,即显式地在js文件第一行写上'use strict'表明该代码在strict模式下运行,避免了变量声明的申明域出错。

三、重要类型介绍(字符串、数组、对象和两个新增类型)

3.1字符串

同c/c++表示方法。

总结常用成员函数:

toUpperCase、toLowerCase:大小写转换;

indexOf:查找字符串出现的位置;

substring:返回子字符串; ### 3.2数组

接上:

indexOf:同String

slice:String的substring()版本。

push和pop:即push_back和pop_back;

unshift和shift:即push_front和pop_front;

sort:支持自定义顺序;

reverse:翻转数组;

splice:从指定的索引开始删除若干元素,然后再从该位置添加若干元素;

concat:拼接数组;

join:用字符链接数组;

支持多维数组; ### 3.3对象

类似c++的类,符号.访问成员变量;

可直接赋值来增加成员,".delete"来删除成员;

继承了object对象;

用in检测是否拥有某个成员(包括继承);

用hasOwnProperty()检查是否自身类成员; ### 3.4.1 Map

类似c++的map类;

set新增key-value;

has判断是否存在key;

get获取key的value;

delete删除key-value; ### 3.4.2 Set

类似c++的set类;

类中允许不同数据类型的“相同”数据存在,如数字4和字符串"4"是可以同时存在的,所以要注意!

add/delete:增加/删除key

3.5迭代访问

就像c++支持迭代器来对数据类型进行随机访问;

访问类型:

  1. 直接index访问;

  2. for ... in ... :调用对象中的每个元素/成员;

  3. for ... of ... :iterable类型的遍历集合方式,支持Array,Map,Set;

  4. forEach函数:类似与python的函数式编程思想,遍历集合,对元素执行相同的操作的内置函数方法;