03【Web】基础-JavaScript(P2)对象

本系列文章,针对Web前端的相关知识进行了详细的介绍


文章目录

  • 03【Web】基础-JavaScript(P2)对象
    • 1. 数组对象
      • 1.1 基本用法
        • 1.1.1 声明、创建、初始化
        • 1.1.2 常用属性和方法
          • 1. 常见属性
          • 2. 常用方法
        • 1.1.3 二维数组
      • 1.2 常用算法
      • 1.2.1 查找算法
        • 1. 线性查找
        • 2. 二分法查找
      • 1.2.2 排序算法
        • 1. 冒泡排序
        • 2. 插入排序
        • 3. 快速排序
      • 1.2.3 存放对象的数组
    • 2. 字符串对象
      • 2.1 字符串的创建
        • 2.1.1 字面量方式
        • 2.1.2 new方式
        • 2.1.3 转移字符
      • 2.2 Stirng与stirng的区别
      • 2.3 字符串的常用方法
        • 2.3.1 频繁使用
        • 2.3.2 经常使用
        • 2.3.3 不常使用
    • 3. RegExp正则表达式对象
      • 3.1 介绍
      • 3.2 使用正则对象(表达式)
        • 3.2.1 创建正则表达式
          • 1. 直接量
          • 2. 构造函数方式
          • 3. 参数说明
        • 3.2.2 执行正则表达式
          • 1.exec()方法
          • 2.test()方法
          • 3.complie()方法
        • 3.2.3 正则表达式的通配符
          • 1. 元字符
          • 2. 括号表达式
          • 3. 常见量词
          • 4. 常用验证的正则表达式
      • 3.3 综合和案例
    • 4. Date对象
      • 4.1 声明,创建
      • 4.2 常用属性和方法
    • 5. Math对象
      • 5.1 声明,创建
      • 5.2 常用属性和方法
    • 6.自定义对象
      • 6.1 构造函数方式
      • 6.2 原始方式
      • 6.3 原型方式
      • 6.4 混合方式
      • 6.5 JSON方式
  • 总结

JS的对象是其特征之一,是自我包含的数据集合。非常重要

1. 数组对象

Array是一个有序的数据集合,使用单独的变量名来存储一些列数据的数据类型。

与强类型语言不同:在JS中定义数组时不需要指定数组的数据类型。

1.1 基本用法

1.1.1 声明、创建、初始化

语法:

/* 语法 */
new Array();
new Array(size);  // 返回一个长度为size的数组,每个元素均为undefined
new Array(element0,element1,element2,...,elementn);

特点:

  • 数组的长度可变。总长度等于数组的最大索引+1

  • 同一数组中的元素类型可以互不相同

  • 当访问未赋值的数组元素时,该元素值为undefined,不会数组越界

示例:

/* 示例 */
var array=[];  //定义一个空数组
var goodTypes=new Array();     //定义一个空数组,并通过索引赋值
goodTypes[0]="男装";
goodTypes[1]="女装";
var foodTypes = new Array("卤菜", "川菜","粤菜");
for (const key in foodTypes) {if (Object.hasOwnProperty.call(foodTypes, key)) {const element = foodTypes[key];document.write(element);}
}var MovieTypes = new Array(8); // 返回一个长度为 8 的数组,每个元素均为undefined
for (const key in MovieTypes) {if (Object.hasOwnProperty.call(MovieTypes, key)) {const element = MovieTypes[key];document.write(element);}
}/* 简写 */
var foods=["兰州拉面","潍坊火烧","背景烤鸭","德州扒鸡"]; // 直接为数组赋值

1.1.2 常用属性和方法

1. 常见属性
常用属性 说明
array.length 数组的长度
array.constructor 返回对此对象的构造函数的引用
array.prototype 为对象添加属性和方法
/* 数组属性演示方法 */
function arrayProperty() {var movies = new Array('飓风营救', '复仇者联盟3:无限战争','疯狂的麦克斯:狂暴之路', '分歧者:绝地反击');switch (movies.constructor) {case String: confirm('movie是一个字符串'); break;case Array: confirm('movies是一个数组对象'); break;case Date: confirm('movies是一个时间对象'); break;default: confirm('movies不是内置对象'); break;}
}
2. 常用方法
方法 说明
arrayA.push (newElement1,…,newElementX); 用于向数组尾部添加一个或多个元素,返回数组的新长度
arrayA.pop() 用于删除并返回数组中尾部最后一个元素
arrayA.concat(arrayB,arrayC,…arrayN); 用于连接俩个或多个数组,返回合并后的新数组,而原数组保持不变
arrayA.join(separator); 将数组中的元素通过指定的字符串连接
arrayA.unshift(newElement1,…,newElementX); 用于向数组开头添加一个或多个元素,并返回新的数组长度
arrayA.shift() 用于删除并返回数组中开头第一个元素
arrayA.sort([sortby]); 用于对当前数组进行排序
arrayA.reverse() 在原有的数组的基础上颠倒数组中元素的顺序,不会创建新数组
array.Foreach() 对数组元素遍历后逐个操作
arrayA.slice(start,[end]); 从数组中返回指定的一部分元素
arrayA.splice (index,howmany,[item1,…itemX)]);
向数组中添加1-n个元素 或者从数组中删除元素
index必选:规定添加和删除元素的位置,
index<0 时从数组尾部向前计数 ,-1表示最后一个元素,-2表示导数第二 howmany必选:表示要删除元素的数量,0代表不删除数据
[items]可选:表示向数组中添加和替换的元素
function arrayConcat() {var movies = new Array('飓风营救', '复仇者联盟3:无限战争','疯狂的麦克斯:狂暴之路', '分歧者:绝地反击');var newMovie = '长津湖:水门桥';var hotMovie = movies.concat(newMovie);var htmlstr = '<p>';(function (movieArray, description) {// document.write(description + ":");htmlstr += description + ":";for (let i = 0; i < movieArray.length; i++) {// document.write(movieArray[i]);htmlstr += movieArray[i];if (i != movieArray.length - 1) {// document.write('、');htmlstr += "、";}}})(movies, '原始影片');// document.write('<hr/>');htmlstr += '</p><hr/><p>';(function (movieArray, description) {// document.write(description + ':');// document.write(movieArray.join('_'));htmlstr += description + ':';htmlstr += movieArray.join('_');})(hotMovie, '最新热映');document.getElementsByClassName('result')[0].innerHTML = htmlstr + "</p>";
}function arrayjoin() {//匿名函数 定一个排序规则var sortNumber = function (a, b) {return b - a;}// 匿名函数 定义一个连接字串var showFoodsByJoin = function (foods) {// document.write('<hr>中国美食:\t');// document.write(foods.join(','));document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>中国美食:\t'+foods.join(',');}var foods = new Array();foods[0] = '兰州拉面';foods[1] = '肉夹馍';foods.push('潍坊火烧');var length = foods.push('泰山包子');// document.write('<hr>排序前的数组长度:' + foods.length);document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>排序前的数组长度:' + foods.lengthshowFoodsByJoin(foods);foods.push('周黑鸭');foods.push('柳亭猪蹄');foods.push('德州扒鸡');showFoodsByJoin(foods);foods.unshift('淄博烧饼');showFoodsByJoin(foods);/*    向数组中添加1-n个元素或者从数组中删除元素,index必选,规定添加和删除元素的位置,index<0 时从数组尾部向前计数,-1表示最后一个元素,-2表示导数第二howmany必选,表示要删除元素的数量,0代表不删除数据[items]可选:表示向数组中添加和替换的元素从第二项开始删除两项,替换为‘北京烤鸭’,总数减少一项 */foods.slice(2, 2, '北京烤鸭');showFoodsByJoin(foods);var betterfood = foods.slice(1, 4);//document.write('<hr>获赞的食品:' + betterfood);document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>获赞的食品有:' + betterfood;//document.write('<hr>获赞反向的:' + betterfood.reverse());document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>获赞逆向显示:' + betterfood.reverse();var prices = [35, 82, 20, 16, 55];//document.write('<hr>排序前的数组:' + prices);document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>排序前的数组:' + prices;//document.write('<hr>默认的默认方式:' + prices.sort());document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>默认排序方式:' + prices.sort();//document.write('<hr>指定排序方式:' + prices.sort(sortNumber));document.getElementsByClassName('resultMethod')[0].innerHTML+='<hr>指定排序方式:' + prices.sort(sortNumber);
}

1.1.3 二维数组

在JS中,没有二维数组或多维数组,不能通过new Array()的方式来创建。只能利用Js的若数据类型特点,在一维数组中存放另一个数组的方式来模拟实现二维数组

var array=new Array();
array[0] = new Array('科幻','流浪地球',80);
array[1]=new Array('战争','长津湖',79);
array[2]='从1992到2012年这二十年时本次太阳纪的最后一个周期,又被称为"地球更新期"...';
array[3]=88;
/* 简写 */
var movies=[['科幻','流浪地球',80],['战争','长津湖',79],['动漫','雄狮少年',6],['戏剧','赵氏孤儿',100]
]

示例:

function arrayMatrix() {var title = new Array('电影类型', '电影名称', '票价');var movies = [['科幻', '流浪地球', 57.9],["动漫", "雾山五行", 27.9],["战争", "长津湖", 87.9],["历史", "我和我的父辈", 97.9],];var htmlstr='';// document.write('<table border="1px" rules="all">');htmlstr+='<table border="1px" rules="all">';// document.write("<tr>");htmlstr+="<tr>";for (let index = 0; index < title.length; index++) {// document.write("<th>" + title[index] + "</th>");htmlstr+="<th>" + title[index] + "</th>";}for (let i = 0; i < movies.length; i++) {// document.write('<tr>')htmlstr+='<tr>';for (let j = 0; j < movies[i].length; j++) {// document.write("<td>"+ movies[i][j]+"</td>");htmlstr+="<td>"+ movies[i][j]+"</td>";}// document.write('</tr>')htmlstr+='</tr>';}// document.write('</table>');htmlstr+='</table>';document.getElementsByClassName('resultMatrix')[0].innerHTML=htmlstr;
}
<script>/* 杨辉三角形 */var array = new Array(8);for (let i = 0; i < array.length; i++) {array[i] = new Array();for (let j = 0; j <= i; j++) {if (j == 0 || j == i) {array[i][j] = 1;} else {array[i][j] = parseInt(array[i - 1][j]) + parseInt(array[i - 1][j - 1]);}}}for (let i = 0; i < array.length; i++) {for (let j = 0; j < array[i].length; j++) {document.write(String(array[i][j]).padStart(2, '0') + "  ");}document.write("</br>");}
</script>

1.2 常用算法

1.2.1 查找算法

/* 触发查找方法 */
btnSearch.onclick = function () {var searchMethodArr = document.getElementById('searchMethod');var searchMethod = searchMethodArr.options[searchMethodArr.selectedIndex];var arraySrc = arrayItemSearch.value.split(',');var searchItem = arraySearch.value;switch (parseInt(searchMethod.value)) {case 0: SearchLine(arraySrc, searchItem); break;case 1: SearchBranch(SortInsert(arraySrc).split(','), searchItem); break;case 2: SearchMinAndMax(arraySrc); break;default: break;}
}
1. 线性查找
/* 线性查找 */
function SearchLine(arraySrc, item) {var index = -1;for (let i = 0; i < arraySrc.length; i++) {if (item == arraySrc[i]) {index = i + 1;break;}}if (index != -1) {alert('检索到所查询数据' + index);} else {alert('未找到检索数据!');}
}
/* 查找最大最小值 */
function SearchMinAndMax(arraySrc) {var max = arraySrc[0];var min = arraySrc[0];for (let i = 0; i < arraySrc.length; i++) {if (arraySrc[i] >= max) {max = arraySrc[i];}if (min >= arraySrc[i]) {min = arraySrc[i]}}alert('数组中最大最小值分分别为:Max=' + max + 'Min=' + min);
}
2. 二分法查找
/* 二分法查找 */
function SearchBranch(arraySrc, item) {var start = 0;var end = arraySrc.length;var middle;var index = -1;while (start <= end) {middle = parseInt((start + end) / 2);item1 = parseInt(item);arraySrc1 = parseInt(arraySrc[middle]);if (item1 == arraySrc1) {index = middle + 1;break;}if (item1 < arraySrc1) {end = middle - 1;}if (item1 > arraySrc1) {start = middle + 1;}}if (index != -1) {alert("二分法需要先进性排序:" + arraySrc.join(',') + '\r\n检索到所查询数据:' + index);} else {alert('二分法需要先进性排序:' + arraySrc.join(',') + '\r\n未找到检索数据!');}
}

1.2.2 排序算法

/* 触发排序方法 */
btnSort.onclick = function () {var sortMethodArr = document.getElementById('sortMethod');var sortMethod = sortMethodArr.options[sortMethodArr.selectedIndex];var arraySrc = arrayItemSort.value.split(',');var sortResult;switch (parseInt(sortMethod.value)) {case 0: sortResult = SortBubble(arraySrc); break;case 1: sortResult = SortSelect(arraySrc); break;case 2: sortResult = SortInsert(arraySrc); break;default: break;}arraySort.value = sortResult;
}
1. 冒泡排序
/* 冒泡排序 */
function SortBubble(array) {var arrayint = [];array.forEach(element => {arrayint.push(+element);});for (let i = 0; i < arrayint.length; i++) {for (let j = 0; j < arrayint.length - 1 - i; j++) {if (arrayint[j] > arrayint[j + 1]) {var temp = arrayint[j];arrayint[j] = arrayint[j + 1];arrayint[j + 1] = temp;}}}return arrayint.join(',');
}
2. 插入排序
/* 插入排序 */
function SortInsert(params) {var arrayInt = [];params.forEach(function (data, index, arr) {arrayInt.push(+data);});for (let i = 1; i < arrayInt.length; i++) {var temp = arrayInt[i];var j = i;while (j > 0 && temp < arrayInt[j - 1]) {arrayInt[j] = arrayInt[j - 1];j--;}arrayInt[j] = temp;}return arrayInt.join(',');
}
3. 快速排序
/* 选择排序 */
function SortSelect(params) {var arrayInt = [];params.forEach(function (data, index, arr) {arrayInt.push(+data);});var index = 0;// N个数比较N-1轮for (let i = 0; i < arrayInt.length - 1; i++) {// 记录当前数为最小数index = i;for (let j = i + 1; j < arrayInt.length; j++) {// 当发现最小数时记下下标if (arrayInt[index] > arrayInt[j]) {index = j;}}if (index != i) {var temp = arrayInt[i];arrayInt[i] = arrayInt[index];arrayInt[index] = temp;}}return arrayInt.join(',');
}

1.2.3 存放对象的数组

2. 字符串对象

2.1 字符串的创建

2.1.1 字面量方式

  • 字符串类型是一个基本的数据类型,而字符串对象是将字符串封装成了一个对象。
  • 封装后的对象可以调用该对象的属性和方法。在Js中可以隐式地将一个字符串转换成一个字符串对象。
var movieString="哪吒"

2.1.2 new方式

  • new方式创建字符串对象是通过调用String()构造函数来完成的,并返回一个String对象
  • 使用字面量方式创建字符串时,其类型是string类型,而通过new方式创建时,返回的是String对象。
  • 仅使用构造函数而没有new关键字时,类型也是string类型
var movieString=new String("哪吒")

2.1.3 转移字符

另外,也有一些教程将转移字符视为一种特殊的数据类型

特殊字符 含义 特殊字符 含义
\b 表示退格 \ " 表示双引号本身
\n 表示换页 \ ’ 表示单引号本身
\t 表示Tab符号 \ \ 表示反斜线
\r 表示回车符 \b 表示退格

2.2 Stirng与stirng的区别

比较维度 String string
含义 String是string的包装类 字面含义
构造函数 String是构造函数可使用其创建字符串对象
具有substring()等方法
string是一种基本的数据类型
没提供substring()等方
prototype String对象具有prototype原型对象
通过浏览器的端点调试方式可查看此区别
string没有提供prototype
typeof() 查看类型 String对象返回Object String()返回function string变量返回string
比较(==) String对象则判断是否对同一对象进行引用 string类型判断其值是否相等
声明周期 使用new创建的对象会一直存在 自动生成的后台代码,执行后立即销毁

2.3 字符串的常用方法

2.3.1 频繁使用

方法 说明
toString() 返回字符串
charAt(index) 返回在指定位置的字符
concat() 连接字符串
split() 把字符串分割为字符串数组
slice(start,[end]) 提取字符串的片段,并在新的字符串中返回被提取的部分
substr(strat,length) 从起始索引号提取字符串中指定数目的字符
substring(string,[stop]) 提取字符串中两个指定的索引号之间的字符
match(searchvalue/regExp) 找一个或多个正则表达式的匹配
search(regExp) 检索与正则表达式匹配的值
valueOf() 返回某个字符串对象的原始值
fromCharCode() 从字符编码创建一个字符串
charCodeAt() 返回指定位置字符的Unicode码

2.3.2 经常使用

方法 说明
replace(regExp/substr,replacement) 替换与正则表达式匹配的子串
localeCompare() 用本地特定的顺序来比较两个字符串
indexOf(searchValue,[fromIndex]) 检索字符串
lastIndexOf(searchValue,[fromIndex]) 从后向前检索字符串
toLocaleLowerCase() 按本地方式把字符串转换为小写
toLocaleUpperCase() 按本地方式把字符串转换为大写
toLowerCase() 把字符串转换为小写
toUpperCase() 把字符串转换为大写

2.3.3 不常使用

方法 说明 方法 说明
fontsize(size) 指定显示字符串尺寸size取1-7 fontcolor(color) 使用指定的颜色来显示字符串
big() 用大号字体显示字符串 blink() 显示闪动字符串
bold() 使用粗体显示字符串 fixed() 以打字机文本显示字符串
italics() 使用斜体显示字符串 link() 将字符串显示为链接
small() 使用小字号来显示字符串 strike() 使用删除线来显示字符串
sub() 把字符串显示为下表 sup() 把字符串显示为上标

注意:JavaScript中的字符串与Java中字符串的区别:

  1. Java中字符串可以用单引号括起来
  2. JavaScript中比较两个字符串的字符序列是否相等使用 == 即可,无需使用equals 方法

3. RegExp正则表达式对象

3.1 介绍

  • 概念

正则表达式是字符串操作的一种逻辑公式,就是实现定义好的一些特殊字符、以及这些特殊字符的组合,组合成一个"规则字符出串",这个“规则字符串”用来表达对字符串的一种过滤逻辑

  • 历史

正则表达式(Regular Expression)最早出现在20世纪40年代,在数学与计算机科学理论中用于反映“正则性”的数学表达特征。直到20世纪70年代末,才真正用于程序设计领域。目前流行的程序设计语言都支持正则表达式。

  • 目的

判断给定的字符串是否符合正则表达式的过滤逻辑(“匹配”)

通过正则表达式,截取我们从字符串中想要获取的特定部分

  • 特点

灵活性、逻辑性和功能性较强

可以迅速地用极简单的方式达到字符串的复杂控制

比较晦涩难懂

3.2 使用正则对象(表达式)

3.2.1 创建正则表达式

1. 直接量
var regExp=/pattern/attributes;  // 不用加双引号
2. 构造函数方式
var regExp=new RegExp(pattern,attributes)
3. 参数说明

以上两种方式下,关于pattern和attributes的 参数说明

参数 说明
pattern 是一个字符串或表达式,表示正则表达式的模式
attributes i:匹配时忽略大小写
g:全局匹配,遇到第一个匹配不会停止,会继续查找,直到完成所有匹配
m:多行匹配,

3.2.2 执行正则表达式

1.exec()方法

检测字符串中正则表达式的匹配情况,当匹配成功时就返回匹配内容和所在位置,语法如下:

var result=regExp.exec(string);

string:表示被检索的字符串

exec():用于返回第一个匹配的内容,可以循环方式进行全局匹配

result:返回的匹配内容,其中 result.index 表示匹配文本的第一个字符出现的位置

其中:获取匹配内容的之后下标使用 regExp.lastIndex

<script type="text/javascript">/* 定义测试字符串 */var str="WebSite CloudWhales Builder by chuanmingxie It's have Copyright at CloudWhales"/*方式1: 使用字面量方式的正则匹配(其中i:忽略大小写,g:全局匹配,可以同时使用) */var regExp=/cloud/ig;var result=regExp.exec(str);alert(result.index);/*方式2: 使用new 对象 方式的正则匹配(其中i:忽略大小写,g:全局匹配,可以同时使用) */var regExpn=new RegExp('cloud','ig');var i=0;var resultStr="";//var resutln=regExpn.exec(str);/* 想使用多次匹配需要通过 while 方式进行多次判空执行 exec */while((result=regExpn.exec(str))!=null){resultStr+="第"+(++i)+"次匹配"+result.index+"~"+regExpn.lastIndex+"\n";}/* 返回查找多次拼接的字符串 */alert(resultStr);
</script>
2.test()方法

当匹配成功时:表示被检索的字符串在参数string与正则表达式匹配时,返回true,否则返回false。

if(RegExpObject.test(string))
  • exec()方法功能强大,test()方法方便快捷,

  • RegExpOb.test(string)等价于RegExpob.exec(string)!=null

<script type="text/javascript">        var str="WebSite CloudWhales Build by chuanmingxie He's have Copyright at CloudWhales"var regExp=/whales/ig;var i=0;/* exec方法更为强大,提供了返回结果,尤其是针对通过通配符等定义的正则表达式而言,使用exec可以进行真正的筛选 */while(regExp.test(str)){alert("匹配"+(++i)+"次"+"检测到最后下标"+regExp.lastIndex);}
</script>
3.complie()方法

用于编译指定的正则表达式,编译后的正则表达式会提高执行速度。多次调用同一个正则表达式,可以使用该方法,提高正则表达式的执行速度。单对于只执行一次的正则表达式,则没有太大作用

complie(RegExpObject)

3.2.3 正则表达式的通配符

1. 元字符
元字符 描述 元字符 描述
. 可以匹配任何字符(除换行和结束符) \. 匹配 点
\w 匹配所有单词字符(0-9,26个字母和下划线) \s 匹配所有空白字符(制表、换行、回车均属于)
\W 匹配所有非单词字符 \S 匹配所有非空白字符
\d 匹配所有数字 \b 匹配单词边界
\D 匹配所有非数字 \B 匹配非单词边界
\n 匹配换行 \xxx 查找8进制xxx
\r 匹配回车 \xdd 查找16进制dd
<script type="text/javascript">/* 元字符的使用 */var str = "WebSite CloudWhales Build by chuanmingxie" + "\r" +" He's have Copyright at CloudWhales" + "\n" +"This's WebSite use 5-10 days and can running 0x86 0x64 or Liunx 077";document.write(str + "<br/>");var regArray = new Array()regArray[0] = /./;regArray[1] = /\d/regArray[2] = /\D/regArray[3] = /\s/regArray[4] = /\S/regArray[5] = /\n/regArray[6] = /\r/// regArray[7] = /\077/   //检测不到,result.index 报错// regArray[8] = /\x86/   //检测不到,result.index 报错for (let i = 0; i < regArray.length; i++) {// while((result=(regArray[i]).exec(str))!=null){result = (regArray[i]).exec(str);alert(result.index + "~" + regArray[i].lastIndex);document.write(result.toString() + ":" + result.index + "~" + regArray[i].lastIndex + "<br/>")// }}
</script>
2. 括号表达式
表达式 描述 表达式 描述
[0-9] 匹配0-9之间的字符 [a-z] 匹配a-z之间的字符
[A-z] 匹配A-z之间的字符 [A-Z] 匹配A-Z之间的字符
[abc] 匹配abc内的任意字符 [boy|girl|body] 匹配括号内的某一项
[^abc] 匹配除了abc以外的字符
<script type="text/javascript">str="cloudcloudcloud123whalesWhalesABC";document.write(str + "<br/>");var regArray=[/[cloud]/,/[^cloud]/,/[0-9]/,/[a-z]/,/[A-z]/,/[A-Z]/,/["whales"|"123"|"ABC"]/];for (let i = 0; i < regArray.length; i++) {result = (regArray[i].exec(str));alert(result.index + "~" + regArray[i].lastIndex);document.write(result.toString() + ":" + result.index + "~" + regArray[i].lastIndex + "<br/>")}
</script>
3. 常见量词
量词 说明 量词 说明
n+ 匹配1-多个 n{x} 匹配 x 个
n* 匹配0-多个 n{x,y} 匹配x-y个
n? 匹配0-1个 n{x, } 匹配x-多个
n$ 匹配结尾 ?=n 匹配紧跟n 的字符串
^n 匹配开头 ?!n 匹配没有紧跟n 的字符串

^匹配一行开头或字符串的开头;$匹配字符串的结尾或一行的结尾

<script type="text/javascript">var str = "cloudwhalescloudwhales";document.write(str + "<br/>");var regArray = [/w+/, /w*/, /w?/, /d{1,7}/, /d{1}/, /d{0,}/, /^c/, /s$/];// /?=cloud/, /?!cloud/ 检测不到,result.index 报错for (let i = 0; i < regArray.length; i++) {result = (regArray[i].exec(str));alert(result.index + "~" + regArray[i].lastIndex);document.write(result.toString() + ":" + result.index + "~" + regArray[i].lastIndex + "<br/>")}
</script>
4. 常用验证的正则表达式
/* 常用的校验正则表达式 - 数字校验 */
var regNum1 = /^[0-9]*$/;                      /* 0~n个数字 */
var regNum2 = /^\d{n}$/;                       /* n位整数 */
var regNum3 = /^\d{n,}*$/;                     /* 至少n位数字 */
var regNum4 = /^\d{m,n}$/;                     /* m-n位的数字 */
var regNum5 = /^([1-9][0-9*])+(.[0-9]{1,2})?$/; /* 非零开头,且最多带两位小数的数字 */
var regNum6 = /^((\-)?\d)+(\.\d{1,2})?$/;     /* 带1-2位小数的整数或负数 */
var regNum7 = /^[1-9]\d*$/;                        /* 带零正整数 */
var regNum8 = /^\-[1-9]\d*$/;                  /* 非零负整数 */
var regNum9 = /^(-? \d+)(\.\d+)?$/;              /* 浮点数 *//* 常用的校验正则表达式 - 字符串校验 */
var regletter1 = /^[\u4e00-\u9fa5]{0,}$/;      /* 汉字 */
var regletter2 = /^[A-Za-z0-9]+$/;                /* 数字和字母组成的字符串 */
var regletter3 = /^.(6,30)$/;                  /* 长度6-30的所有字符 */
var regletter4 = /^[A-Za-z]+$/;                   /* 英文字符组成的字符串,不区分大小写 */
var regletter5 = /^[A-Z]+$/;                  /* 小写英文字符组成的字符串 */
var regletter6 = /^[a-z]+$/;                  /* 大写英文字符组成的字符串 */
var regletter7 = /^\w+$/;                     /* 数字,字母,下划线组成的字符串 */
var regletter8=/^[\u4e00-\u9fa5A-Za-z0-9_]+$/;    /* 汉字,字母,下划线组成的字符串 */
var regletter9=/^[\u4e00-\u9fa5A-Za-z0-9]+$/; /* 汉字,字母,组成的字符串 */
var regletter10=/^#?([a-f0-9]{6}[a-f0-9]{3})$/;    /* 16进制值 *//* 常用的校验正则表达式 - 用户信息校验*/
var userInfo1 = /^((\d{3}-\d{8})|(\d{4}-\d{7}))$/; /* 国内电话号码 */
var userInfo2 = /(^\d{15}$)|(^\d{17}([0-9]|X))$/   /* 身份证号码 */
var userInfo3 = /^\d{4}-\d{1,2}-\d{1,2}/           /* 日期格式 */
var userInfo4 = /[1-9][0-9]{4,}/;                  /* QQ号,从10000开始 */
var userInfo5 = /\n\s* \r/;                            /* 可用来删除空白行 */
var userInfo6 = /[1-9]\d{5}(?! \d)/;               /* 邮政编码,其中(?! \d)表示位置的后面不能匹配\d */
var userInfo7 = /^[+]{0,1}(d){1,3}[]?([-]?((d)|[]){1,12})+$/;            /* 手机号码(不好用) */
var mobilePhoneReg = /^[+]{0,1}\d{1,3}[-| ]?(1[3|4|5|7|8][0-9]{9})$/;   /* 手机号码(好用) */
var userInfo8 = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;      /* Email邮箱 */
var userInfo9 = /((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))/;     /* IP地址 */
<script type="text/javascript">/* 正则的神奇之处就在于组合的千变万化,如下面的三种方式 ([.]{1,}) : 括号表达式[]代表限定必须为括号内的字符,只能为"." 表示1-多个 "." 组成字符串([\.]{1,}):与上面表达式一样(.{1,}) : 表示任意超过1个的字符的字符串([0-9A-z-_]) 表示任意 数子、字母、中划、下划线组成的字符串([\dA-z\.])与上面表达式相同*/var regExp = /^[0-9A-z_-]+@([\.]{1,})+\.(com|org|cn)$/;alert(regExp.test("12chuan-_dce@..org"));       // true;var regExp = /^[0-9A-z_-]+@(.{1,})+\.(com|org|cn)$/;alert(regExp.test("12chuan-_dce@sina.org"));       // true;var regExp = /^([0-9A-z_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;alert(regExp.test("12chuan-_dce@sina.org"));       // true;var regExp = /^[0-9A-z_-]+@([0-9A-z-_]{1,})+\.(com|org|cn)$/;alert(regExp.test("12chuan-_dce@sina.org"));       // true;
</script>

3.3 综合和案例

/* 验证座机号码: */
function telephoneValidate(telephone) {/* d{3} 表示匹配3个数字。 座机是 区号-号码 包含3位-8位和4位-7位两种形式*/var telephoneReg = /^((\d{3}-\d{8})|(\d{4}-\d{7}))$/;return telephoneReg.test(telephone);
}/* 验证手机号码 */
function mobileValidate(mobile) {/* 电话号码是11位,第二位包括3、4、5、6、7、8,第三位取0-9,最后补全9位 */var mobileReg = new RegExp("1[3|4|5|7|8][0-9]{9}");return mobileReg.test(mobile);
}/* 判断是否为纯数字串 */
function isDigit(str) {var digitReg = new RegExp("^\\d*$");var digitReg2 = /^\d* $/;return digitReg2.test(str);
}function contentValidate(content) {document.write(content + "<br/>");var contentReg = new RegExp('Ea', "gi");var i = 1;while ((result = contentReg.exec(content)) != null) {document.write("第" + (i++) + "次匹配" + result + ",位置在"+ result.index + "~" + contentReg.lastIndex + "<br />");}
}
/* 自调函数 */
(function () {var telephone = "0532-1234-5671234";if (telephoneValidate(telephone)) {document.write(telephone + "座机号码无效<br />");} else {document.write(telephone + "座机号码无效<br />");}var mobile = "17348594235";if (mobileValidate(mobile)) {document.write(mobile + "手机号码有效<br />");} else {document.write(mobile + "手机号码无效<br />");}var num = "123a";document.write(num + ":" + (isDigit(num) ? "使出数字" : "非出数字") + "<br />");var content = "Qingdao,located in the southEast part of Shandong Province,is a beautiful  SEASIDE city with clear air and enchanting SEA view";contentValidate(content);document.write("<br />");
})();

4. Date对象

用来对日期和事件进行操作,它的大多数方法需要利用对象调用,因此必须声明和通过new 创建Date对象。

4.1 声明,创建

new Date();
new Date(milliseconds);
new Date(yyyy,MM,dd);
new Date(yyyy,MM,dd,hh,mm,ss);
new Date(MM/dd/yyyy hh:mm;ss);
new Date("month dd,yyyy");
new Date("month dd,yyyy hh:mm:ss");

4.2 常用属性和方法

  • Date对象没有可供直接访问的对象,只有获取和设置时间的方法

  • 在方法 带有 UTC的均表示设置和获取国际date

  • setInterval(code,millisec) 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

方法** 描 述
getDate() 返回一个月中的某一天(1~31) setDate(dateInt) 设置一个月中的某一天(1~31)
getDay() 返回一周中的某一天(0~6) setDay(dayInt) 设置一周中的某一天(0~6)
getMonth() 返回月份(0~11) setMonth(monthInt) 设置回月份(0~11)
getFullYear() 返回4位数字的年份 setFullYear(yearInt) 设置4位数字的年份
getHours() 返回Date对象的小时(0~23) setHours(hourInt) 设置Date对象的小时(0~23)
getMinutes() 返回Date对象的分钟(0~59) setMinutes(minInt) 设置Date对象的分钟(0~59)
getSeconds() 返回Date对象的秒数(0~59) setSeconds(secInt) 设置Date对象的秒数(0~59)
getMilliseconds 返回当前毫秒数 setMilliseconds(millInt) 设置当前毫秒数
getTime() 返回1970年1月1日至今的毫秒数 setTime(timeInt) 设置从1970年1月1日至今的毫秒数
parse(dataString) 静态方法返回 getTime
toLocaleString() 使用所在计算机上配置的特定时间格式
将Date对象的日期转换为字符串
toGMTString 根据格林尼治时间转化成字符串 valueOf() 返回日期对象的原始值
(function () {showTime(new Date());showTime(new Date(121825316795));showTime(new Date(2012,05,12));showTime(new Date(2021,10,2,12,08,12));showTime(new Date("10/12/2021 9:25:38"));showTime(new Date("April 25,2045"));showTime(new Date("April 25,2045 18:24:24"));
})();function showTime(myDate) {var year = myDate.getFullYear();var month = myDate.getMonth() + 1;var day = myDate.getDate();var hour = myDate.getHours();var minute = myDate.getMinutes();var second = myDate.getSeconds();var pcontrol = document.getElementsByTagName('p')[2];pcontrol.innerHTML +=getImg(year) + "年" +getImg(month) + "月" +getImg(day) + "日 " +getImg(hour) + ":" +getImg(minute) + ":" +getImg(second) + "<br>";
}function getImg(params) {if (params < 10) {params = '0' + params;}params=params.toString(); //必须toString() 否则length 无效var picpre = "<img src='img/num_";var pixrear = ".png' />";var result = '';for (let i = 0; i < params.length; i++) {result += picpre + params[i] + pixrear;}return result;
}

5. Math对象

处理数学运算

5.1 声明,创建

Math的属性和方法可以直接调用

5.2 常用属性和方法

属性 描 述 属性 描述
LN2 返回2的自然对数(约等于0.693) E 返回算术常量e,即自然对数的底数(约等于2.718)
LN10 返回10的自然对数(约等于2.302) PI 返回圆周率(约等于3.14159)
LOG2E 返回以2为底的e的对数(约等于1.442) SORT2 返回2的平方根(约等于1.414)
LOG10E 返回以10为底的e的对数(约等于0.434) SQRT1_2 返回2的平方根的倒数(约等于0.7071)
方法 描 述 方法 描 述
abs(x) 返回数字的绝对值 min(x,y) 求最小值
ceil(x) 对数字进行上取整 pow(x,y) 返回x的y次幂
floor(x) 对数字进行下取整 sqrt(x) 返回数字的平方根
round(x) 对数字进行四舍五入 random() 返回0~1之间的随机数(1-16:random()*16+1)
exp(x) 返回e的指数 sin(x)/cos(x)/tan(x) 计算x的正弦、余弦、正切值
log(x) 返回数字的自然对数(底为e) asin(x)/acos(x)/atan(x) 计算x的反正弦、反余弦、反正切值
max(x,y) 求最大值
/* Math对象-属性的使用 */
(function() {document.write('<br />Math.PI=' + Math.PI);document.write('<br />Math.E=' + Math.E);document.write('<br />Math.LN2=' + Math.LN2);document.write('<br />Math.LN10=' + Math.LN10);document.write('<br />Math.LOG2E=' + Math.LOG2E);document.write('<br />Math.LOG10E=' + Math.LOG10E);document.write('<br />半径为4的圆的面积' + circularArea(4));document.write("<br />半径为8,高为10的圆柱体的体积" + CylinderCapacity(8, 10));
})()function circularArea(radius) {return Math.PI * radius * radius;
}function CylinderCapacity(radius, height) {return Math.PI * radius * radius * height;
}/* Math 对象-方法的使用 */
(function() {maxAndMin();var randomNum = 60 + Math.random() * 40;document.write("随机生成一个60-100之间的数:" + randomNum);document.write("<br />round()四舍五入的结果" + Math.round(randomNum));document.write("<br />ceil()向上取整的结果:" + Math.ceil(randomNum));document.write("<br />向下取整的结果:" + Math.floor(randomNum));document.write("</p><hr /><p>");document.write("2的3次幂:" + Math.pow(2, 3));document.write("<br />16的平方根:" + Math.sqrt(16));document.write("<br />90<sup>o</sup>的正弦值是:" + Math.sin(90 * Math.PI / 180)+"</p>");
})()function maxAndMin() {var num = 10;document.write("<hr /><p>随机生成" + num + "个整数:");var array = [];var maxNum = 0;var minNum = 0;for (var i = 0; i < num; i++) {var tmp = Math.random() * 100;array[i] = Math.floor(tmp);document.write(array[i] + "\t");if (i == 0) {maxNum = array[0];minNum = array[0];} else {maxNum = Math.max(maxNum, array[i]);minNum = Math.min(minNum, array[i]);}}document.write("<br />随机数中,最大数为:" + maxNum);document.write("<br />随机数中,最小数为:" + minNum);document.write("</p><hr /><p>")
}

6.自定义对象

6.1 构造函数方式

  • 原理:

通过构造函数constructor function创建一个JS对象

构造函数名即为对象的类名,使用时通过new运算符和构造函数创建

  • 语法
Function ClassName([param1],[param2],…){this.propertyName=value;this.MethodName=functionName|function() {};
}
  • 示例
/* 构造函数定义对象 */
function Goods(name, type, price, color) {this.name = name;this.type = type;this.price = price;this.color = color;this.showInfo = function () {document.write("商品名称为:" + this.name +"<br>商品类型为:" + this.type +"<br>商品价格为:" + this.price +"<br>商品颜色为:" + this.color)}this.showColor = showColor;function showColor() {document.write("商品颜色为:" + this.color + "<br>");}
}
/* 调用对象 */
var goods1 = new Goods("男士衬衫", "男装", 200, "白色");
var goods2 = new Goods("女士花裙", "女装", 700, "红色");
goods1.showColor();
goods2.showInfo();

6.2 原始方式

  • 原理:

首选定义一个object对象,然后为对象添加所需的属性和方法

  1. 使用object创建一个Object对象
  2. prototypeName表示为object对象添加的属性名
  3. methodNamr 表示为object添加的方法名
  4. 方法名的值可以是预先定义好的函数,也可以是匿名函数
  • 语法
var object=new object();
object.prototypeName=value;
object.MethodName=functionName|function(){};
  • 示例
/* 原始方法定义对象 */
var goodsOption = new Object();
goodsOption.name = "男士白领衬衫";
goodsOption.type = "男装";
goodsOption.price = "580";
goodsOption.color = "white";
goodsOption.showInfo = function () {document.write("商品名称为:" + goodsOption.name +"<br>商品类型:" + goodsOption.type +"<br>商品价格:" + goodsOption.price +"<br>商品颜色:" + goodsOption.color);
}
goodsOption.showColor = showColor;
function showColor() {document.write("<br>商品颜色为:" + goodsOption.color);
}
/* 调用对象 */
goodsOption.showInfo();
goodsOption.showColor();

6.3 原型方式

  • 原理:通过prototype属性对象添加新的属性和方法

  • 语法

object.prototype.name(属性或方法)=value;
/*object表示被扩展的对象,包括系统内置对象和自定义对象Prototype 表示对象的原型name 表示所添加的属性或方法。当添加属性时,value代表属性值;当添加方式时value为函数的引用或匿名函数
*/
  • 示例
/* 原型方法定义对象 */
function Goods() { }
Goods.prototype.name = "耐克运动鞋";
Goods.prototype.type = "鞋类";
Goods.prototype.price = "1200";
Goods.prototype.color = "白色";
Goods.prototype.showInfo = function () {document.write("商品名称为:" + this.name +"<br >商品类型为:" + this.type +"<br >商品价格为:" + this.price +"<br >商品颜色为:" + this.color);
}
Goods.prototype.showColor = showColor;
function showColor() {document.write('商品颜色为:' + this.color);
}
/* 调用原型方法定义的对象 */
var goods = new Goods();
goods.showInfo();
goods.showColor();

6.4 混合方式

  • 原理:将以上方式混合使用

  • 语法:遵循各自的语法格式

  • 示例

/* 4. 混合定义法 - 以构造函数定义属性,原型拓展定义方法 */
function goodMuddy(name, type, price, color) {this.name = name;this.type = type;this.price = price;this.color = color;
}
goodMuddy.prototype.showInfo = function () {document.write('商品名称为:' + this.name +"<br>商品类型为:" + this.type +"<br>商品价格为:" + this.price +"<br>商品颜色为:" + this.color);
}
goodMuddy.prototype.showColor = showMuddyColor;
function showMuddyColor() {document.write('<br>商品颜色为:' + this.color);
}

6.5 JSON方式

  • 原理

是一种基于ECAMScript的轻量级数据交换格式,采用完全独立于语言的文本格式, 能够以更加简明的方式创建对象JSON对象。

与XML数据相比,JSON数据格式具有简洁易读,数据体积小、传输速度快等的特点。JSON对象是一种轻量级的数据交换格式,是理想的数据交换格式。

  • 语法

JSON以{开始 ,以}结束。属性名和属性值之间使用冒号隔开,属性的类型可以是字符串、数值、日期、数组或自定义对象等类型。

方法部分是由方法和匿名函数构造,并使用冒号(“:”)隔开, 属性或方法之间使用逗号(,)隔开,最后一项不需要逗号。

  • 示例

定义JSON对象作为自定义对象

var customerData = {name: 'chuamingxie',type: 'Member user',enjoy: ['看剧', '读书', '创造', '运动'],hometown: {province: 'anhui',city: 'huaibei',},orders: [{ name: '男士衬衫', price: '200', type: '男装', numebr: '6' },{ name: '男士鞋服', price: '180', type: '男装', numebr: '2' },],consumption: function () {var sum = 0;this.orders.forEach(element => {sum += element.price * element.numebr;});return sum;},userfeature: function () {document.write('用户姓名:' + this.name + '<br>用户类别:'+ this.type +'<br>用户家乡:' +this.hometown.province + "省 " + this.hometown.city + "市" +'<br>用户爱好:' +this.enjoy.join(','));},
};

将JSON字符串转换为JSON对象

在传输过程中,JSON对象往往以字符串的形式进行传输,所以在页面中需要通过JavaScript中的evel()方式或者Function对象的方式将字符串解析成JavaScript

alert(typeof(evel("{}")))     // return undefined
alert(typeof(evel("({})")))   // return object[object]
/*   即进行JSON转化时,要添加一对小括号才能进行正常转化   */
var movieStr = '{' +'name:"长津湖",' +'type:"战争",' +'price:80,' +'showInfo:function(){' +'document.write("影片名称:"+this.name+",电影类型:"+this.type+",票价:"+this.price+"<br/>");'+'}' +
'}';
var movie = eval("(" + movieStr + ")");
movie.showInfo();
var movieStr = '{' +'name:"长津湖",' +'type:"战争",' +'price:80,' +'showInfo:function(){' +'document.write("影片名称:"+this.name+",电影类型:"+this.type+",票价:"+this.price+"<br/>");'+'}' +
'}';
document.write('方式1')
var movie=(new Function("","return"+movieStr))();
movie.showInfo();document.write('方式2')
var movie2=new Function("","return"+movieStr);
var movie=new movie2();
movie.showInfo();

总结

以上就是【Web】基础-JavaScript(P2)-对象的基本介绍

03【Web】基础-JavaScript相关推荐

  1. Web基础——JavaScript之事件绑定与事件对象

    目录 1.事件的绑定 2.事件的绑定(注意事项) 3.失去焦点和获得焦点 4.键盘事件 5.鼠标事件 6.表单事件 7.页面加载事件 8.下拉框事件 9.事件对象 10.currentTarget和t ...

  2. Web前端-JavaScript基础教程上

    Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...

  3. Web前端-JavaScript基础教程下

    Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...

  4. JavaScript学习笔记03【基础——对象(RegExp、Global)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  5. educoder头歌实训 web课——JavaScript语言基础:JS循环语句

    educoder头歌实训 太原理工大学web课程----JavaScript语法基础:JS运算符_玛卡巴卡的博客-CSDN博客 第1关:while类型 任务描述 质数的定义如下:大于1的自然数,且除 ...

  6. C1认证之web基础知识及习题——我的学习笔记

    文章目录 目录 文章目录 前言​​​​​​​ Web基础 十四.语义化标签 知识点 习题 十五.表单标签 知识点 习题 十六.转义字符 知识点 习题 十七.Head头 知识点 习题 十八.CSS引入方 ...

  7. JQuery-学习笔记03【基础——DOM操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] JQuery-学习笔记01[基础--JQuery基础]--[day01] JQuery-学习笔记02[基础--JQuery选择器] JQuery-学习 ...

  8. # EXP8 Web基础

    EXP8 Web基础 基础问题回答 1.什么是表单? 表单:表单在网页中主要负责数据采集功能. 基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表 ...

  9. 20145233《网络对抗》Exp8 Web基础

    20145233<网络对抗>Exp8 Web基础 实验问题思考 什么是表单? 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域 ...

最新文章

  1. 命令行创建React项目
  2. activemq启动异常
  3. angularjs 导出excel php,AngularJS 导出Excel指令
  4. Windows7查看本地Java安装是否成功和路径的方法
  5. 基于 ida 的反汇编转换 Obj 的可行性 笔记(1)
  6. html/css学习笔记(一)
  7. python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...
  8. scrapy框架_Python:Scrapy框架
  9. 习题:输出九九乘法表
  10. hihoCoder挑战赛25
  11. 开发LED屏幕页面遇到的问题
  12. excel如何将英文星期转为中文星期_用Excel制作偶像日历的体验,你一定不能错过...
  13. 人类高质量编程语言Delphi盛大发布2021新版本RAD Studio 11 Alexandria
  14. 企业网站排名,关键词选择原则,6个基本策略
  15. OneZero第三周第一次站立会议(2016.4.4)
  16. 手机麦克风权限在哪里开启_手机麦克风权限怎么设置
  17. 气死老师的作文(转贴)
  18. 考勤 日历 ajax,vue实现钉钉的考勤日历
  19. LWIP+ENC28J60长时间运行后无法访问外网服务器
  20. centos系统安装教程

热门文章

  1. python入门教学视频材料整理-免费
  2. 云计算技术-01-云计算与云服务概述
  3. 小时 分钟 秒 计算
  4. 雨林木风 GHOST_XP SP3 快速装机版YN12.08
  5. 墨珩科技荣获“高新技术企业”认定
  6. 直博清华的元气少女!本科就发表了SCI...
  7. rmvb 文件格式解析
  8. 培训班出来的人后来都怎么样了?(八)
  9. 离散数学班委成员选举,王小红,李强,丁金生,python实现
  10. OpenLooKeng