JavaScript笔记

JavaScript

​ JavaScript包括三块:ECMAScript、DOM、BOM

  • ECMAScript是ECMA指定的262标准,是JavaScript核心语法
  • DOM编程是通过JavaScript对HTML中的dom节点进行操作,DOM是有规范的,DOM规范是W3C制定的。
  • BOM编程是对浏览器本身操作,例如:前进、后退、地址栏、关闭窗口、弹窗等。由于浏览器有不同的厂家制造,所以BOM缺少规范,一般只是有一个默认的行业规范。

​ JS是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序。在JS中有很多事件,并且任何事件都会对应一个事件句柄。【注意:事件和事件句柄的区别是:事件句柄是在事件单词前添加一个on】。而事件句柄是以HTML标签的属性存在的。

1. JS中的数据类型

  • 原始类型:UndefinedNumberStringBooleanNull
  • 引用类型:Object以及Object的子类
  • ES规范(ESMAScript),在ES6之后,又基于以上的6中类型之外添加了一种新的类型:Symbol
  • JS中有一个运算符叫做typeof,这个运算符可以在程序的运行阶段动态的获取变量的数据类型。
    • typeof 变量名
    • 运算结果是以下6个字符串之一,注意字符串都是全部小写:undefinednumberstringbooleanobjectfunction
  • 在JS当中比较字符串是否相等使用==完成,没有equals
1.1 Undefined

Undefined类型只有一个值,这个值就是undefined,当一个变量没有手动赋值,系统默认赋值undefined,或者也可以给一个变量手动赋值undefined

1.2 Number
  • Number类型包括哪些值?(整数、小数、正数、负数、NaN、Infinity都属于Number类型)
  • 运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN
  • 关于isNaN函数,用法:isNaN(数据)。结果是true表示不是一个数字,结果是false表示是一个数字。

  • parseInt()函数:将字符串自动转换为数字,并且取整数位。

  • parseFloat()函数:将字符串自动转换为数字。
  • Math.ceil()函数(Math是数学类,数学类当中有一个函数叫做ceil(),作用是向上取整)
1.3 Boolean
  • Boolean类型中有一个函数叫做:Boolean(数据)。作用是将非布尔类型转换成布尔类型,“有”就转换成true,“没有”就转换成false
1.3 String
  • 创建字符串对象的两种方式
    • var s = "abc"; string(属于原始类型String)。
    • 使用JS内置的支持类Stringvar s2 = new String("abc");。需要注意:String是一个内置的类,可以直接用,String的父类是ObjectString(属于Object类型)
    • 无论大小String,属性和函数都是通用的。
    • 关于String常用的属性和函数:
      • 常用属性:length属性
      • 常用函数:indexOflastIndexOfreplacesubstrsubstringtoLowerCasetoUpperCasesplit
      • 子字符串的两个函数的区别:substr(startIndex, length)substring(startIndex, endIndex) 注意:不包含endIndex
1.4 Object
  • prototype属性:作用是给类动态的扩展属性和函数 。

  • JS中如何定义类,怎么new对象?

    • 定义类的语法:
    // 第一种方式:
    	function 类名(形参) {
    		
    	}
    // 第二种方式:
    	类名 = function(形参) {
    
    	}
    • 创建对象的语法:
    new 构造方法名(实参);	// 构造方法和类名一致
  • JS中类的定义和构造函数的定义是放在一起来完成的,JS中的类的定义,同时又是一个构造函数的定义

2. null NaN undefined这个三个值有什么区别

  • 数据类型不一致。
    • typeof null == "object"typeof NaN == "number"typeof undefine == "undefined"
    • null == NaN; // falsenull == undefined; // trueundefined == NaN; // false
    • ==(等同运算符:只判断值是否相等);===(全等运算符:既判断值是否相等,又判断数据类型是否相等)

3. JS中的常用事件

  • blur:失去焦点;focus:获得焦点
  • click:鼠标单击;dblclick:鼠标双击
  • keydown:键盘按下;keyup:键盘弹起
  • mousedown:鼠标按下;mouseover:鼠标经过;mousemove:鼠标移动;mouseout:鼠标离开;mouseup:鼠标弹起
  • reset:表单重置;submit:表单提交
  • change:下拉列表选中项改变,或文本框内容改变
  • select:文本被锁定
  • load:页面加载完毕(整个HTML页面中所有的元素全部加载完毕之后发生)

回调函数的特点:自己把这个函数代码写出来了,但是这个函数不是自己负责调用,由其他程序负责调用该函数

4. 正则表达式

​ 正则表达式(Regular Expression)主要用在字符串格式匹配方面。

  • 常见的正则表达式符号
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
重复
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
反义
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
x 匹配除了x以外的任意字符
aeiou 匹配除了aeiou这个急字母以外的任意字符
  • 创建正则表达式对象及调用
// 第一种创建方式
	var regExp = /正则表达式/flags;
// 第二种创建方式:使用内置支持类RegExp
	var regExp = new RegExp("正则表达式", "flags");

/*
	g关于flags:
		g:全局匹配
		i:忽略大小写
		m:多行搜索(ES规范制定之后才支持m)。当前面是正则表达式的时候,m不能用。只有前面是普通字符串的时候,m才可以使用
		
	正则表达式对象的test()方法?
		true / false = 正则表达式对象.test(用户填写的字符串)
		true : 字符串格式匹配成功
		false: 字符从格式匹配失败
*/

5. 总结,有哪些方法可以通过浏览器往服务器发请求?

  • 表单form的提交
  • 超链接
  • document.location
  • window.location
  • window.open(“url”)
  • 直接在浏览器地址栏上输入URL,然后回车

以上所有的请求方式均可以携带数据给服务器,只有通过表单提交的数据才是动态的。

6. JSON

  • JavaScript Object Notation,简称JSON(数据交换格式)。是一种标准的数据交换格式。(目前非常流行,90%以上的系统,系统A与系统B交换数据的话,都是采用JSON)

  • JSON是一种标准的轻量级的数据交换格式。特点是:体积小、易解析

  • 在实际的开发中有两种数据交换格式,使用最多,其一是JSON,另一个是XML

    XML体积较大,解析麻烦,但是有其优点是:语法严谨。(通常银行相关的系统之间进行数据交换的话会使用XML)

  • JSON的分类:

    1. json对象,JSONObject,这种对象的格式为,名称:值,也可以看做是key:value格式。
    2. json数组,JSONArray,基本格式[{….}, {….}, ….]
  • JSON语法格式:

    var jsonObj = {
    	"属性名" : 属性值,
    	"属性名" : 属性值,
    	"属性名" : 属性值,
    	"属性名" : 属性值,
    	...
    };
  • eval()函数的作用:将字符串当作一段JS代码解释并执行。

    可以使用eval函数,将JSON格式的字符串转换成JSON对象。

  • 在JS当中,[]{}有什么区别?

    • java中的数组:int[] arr = {1, 2, 3, 4, 5};
    • JS中的数组:var arr = [1, 2, 3, 4, 5];
    • JSON:var jsonObj = {"email" : "zhangsan@123.com", "age" : 25};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!