首页 > 编程语言 >前端基础之JavaScript对象

前端基础之JavaScript对象

时间:2024-03-21 16:23:08浏览次数:29  
标签:console log 对象 前端 JavaScript JSON new Math

一、什么是对象

现实生活中:万物皆对象,对象是一个具体的事物,看得见摸得着的实物。

  • 例如,一本书、一辆汽车、一个人可以是“对象”,一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。

在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

对象是由属性方法组成的

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事务的行为,在对象中用方法来表示(常用动词)

比如

  • 大小、颜色、重量、屏幕尺寸、厚度等 ----> 属性
  • 打电话、发短信、玩游戏、砸核桃等 ----> 方法

二、为什么需要对象

保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。如果要保存一个人的完整信息呢?

例如,将"quan"的个人信息保存在数组中的方式为:

var arr = ['quan', '男', '56', '100'];

js中的对象表达结构更加清晰,更强大。quan的个人信息在对象中的表达结构如下:

quan.姓名 = 'quan';  ---->      person.name = 'quan';
quan.性别 = '男';  ---->      person.sex = '男';
quan.年龄 = 56;  ---->      person.age = 56;
quan.身高 = 100;  ---->      person.height = 100;

三、自定义对象的三种方式

在JavaScript中,现阶段我们可以采用是三种方式创建对象(object):

  • 利用字面量创建对象
  • 利用new Object创建对象
  • 利用构造函数创建对象

(1)利用字面量创建对象

对象字面量:就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法。

{}里面采用键值对的形式表示

  • 键:相当于属性名
  • 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型、函数类型等)

类似于python里面的字典 {}

var d = {
    'name':'xiao',
    'age':18
}

对象的调用

  • 对象里面的属性调用 : 对象 . 属性名 ,这个小点 . 就理解为“ 的 ”
  • 对象里面属性的另一种调用方式 : 对象 [‘ 属性名’ ] ,注意方括号里面的属性必须加引号,我们后面会用
  • 对象里面的方法调用:对象 . 方法名 () ,注意这个方法名字后面一定加括号
// 比python从字典获取值更加的方便
typeof d
// 'object'
d['name']
// 'xiao'
d.name   
// 'xiao'
d.age
// 18

for(let i in d){
    console.log(i,d[i])
}  # 支持for循环,暴露给外界可以直接获取的也是键
VM281:2 name xiao
VM281:2 age 18

变量、属性、函数、方法总结

  • 变量:单独声明赋值,单独存在

  • 属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征

  • 函数:单独存在的,通过“函数名 ()” 的方式就可以调用

  • 方法:对象里面的函数称为方法,方法不需要声明,使用“对象 . 方法名 ()” 的方式就可以调用,方法用来描述该对象的行为和功能。

(2)利用 new Object 创建对象

var d2 = new Object()
d2
{}
typeof d2
'object'
d2.name = 'xiao'   # 直接填入就可以
'xiao'
d2.age = 18
18
d2
{name: 'xiao', age: 18}
  • Object() :第一个字母大写
  • new Object() :需要 new 关键字
  • 使用的格式:对象 . 属性 = 值 ;

(3)利用构造函数创建对象

① 概述

构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

在js中,使用构造函数时要注意一下两点:

  • 构造函数用于创建某一类对象,其首字母要大写
  • 构造函数要和new一起使用才有意义

② 示例

  • 构造函数,如 Stars() ,抽象了对象的公共部分,封装到了函数里面,它泛指某一大类( class )

  • 创建对象,如 new Stars() ,特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化

  • 在构造函数内部,this 指针指向即将创建的新对象。

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

const john = new Person("John", "Doe");
  • 也可以简化为利用ES6的类语法

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
}

const john = new Person("John", "Doe");

③ new 关键字

new 在执行时会做四件事情:

  1. 在内存中创建一个新的空对象。
  2. 让 this 指向这个新的对象。
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面不需要 return )

④ 注意

  1. 构造函数约定首字母大写。
  2. 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  3. 构造函数中不需要 return 返回结果。
  4. 当我们创建对象的时候,必须用 new 来调用构造函数。

补充 遍历对象属性(for)

可以通过 for...in 循环遍历对象的所有可枚举属性,但不包括原型链上的属性。

语法

for (变量 in 对象名字){
    // 在此执行代码
}

示例

语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为k或者key

for (var k in obj) {
    console.log(k);        // 这里的 k 是属性名
    console.log(obj[k])    // 这里的 obj[k] 是属性值
}

四、Date对象

(1)概述

  • Date对象在JavaScript中是用于处理日期和时间的重要对象,可以方便地进行日期和时间的操作、比较和格式化。
  • Date 对象是一个构造函数,所以我们需要实例化后才能使用

(2)如何使用

① 创建Date对象:

  • 可以使用new Date()构造函数来创建一个表示当前日期和时间的Date对象。
  • 可以传递不同的参数来创建特定日期和时间的Date对象,如new Date('2024-03-21')new Date(2024, 2, 21)

② 示例

  • 创建当前日期和时间的对象实例
var currentDate = new Date();
  • 创建指定日期和时间的对象实例
var specificDate = new Date(2023, 6, 5, 10, 30, 20); // 参数依次为年、月(从开始计数)、日、时、分、秒

③ 注意

  • 如果Date()不写参数,就返回当前时间
  • 如果Date()写参数,就返回括号里面输入的时间

(3)自定义时间

  • 可以使用Date对象的对应方法来设置日期和时间的不同部分,如setDate()setMonth()setFullYear()setHours()setMinutes()setSeconds()等。
var date = new Date();

date.setFullYear(2024); // 设置年份
date.setMonth(8); // 设置月份(0表示一月,11表示十二月)
date.setDate(15); // 设置日期(月中的某一天)
date.setHours(18); // 设置小时
date.setMinutes(45); // 设置分钟
date.setSeconds(30); // 设置秒数

(4)日期格式化

如果我们想要 2024-03-21 11:11:11 格式的日期,要怎么办?

需要获取日期指定的部分,所以我们要手动的得到这种格式

方法名 说明 代码
getFullYear() 获取当前年份 dateObj.getFullYear()
getMonth() 获取当前月份(0-11月) dateObj.getMonth()
getDate() 获取当天日 dateObj.getDate()
getDay() 获取星期几(周日为0-周六6) dateObj.getDay()
getDay() 获取当前小时 dateObj.getDay()
getMinutes() 获取当前分钟 dateObj.getMinutes()
getSeconds() 获取当前秒 dateObj.getSeconds()
getMilliseconds() 获取毫秒 dateObj.getMilliseconds()

(5)获取时间戳

  • Date对象可以通过getTime()方法获取自 1970 年 1 月 1 日 00:00:00 UTC 起的毫秒数时间戳。
let date = new Date();
date.getTime();   // 获取时间戳

// 或者这么写
let now =+ new Date();

(6)其他方法

  • Date对象还提供了其他一些方法,如toDateString()toLocaleString()toUTCString()等,用于返回不同格式的日期字符串。
  1. toDateString()
    • toDateString()方法返回一个表示日期部分的字符串,不包括时间部分。
    • 返回的日期字符串格式因浏览器而异,可能是类似于"Wed Mar 21 2024"这样的格式。
const today = new Date();
const dateString = today.toDateString();
console.log(dateString); // 输出类似于 "Wed Mar 21 2024"
  1. toLocaleString()
    • toLocaleString()方法返回一个表示日期和时间的本地化字符串,根据浏览器的语言环境返回不同格式。
    • 可能包括日期和时间,如"3/21/2024, 3:30:00 PM"。
const today = new Date();
const localString = today.toLocaleString();
console.log(localString); // 输出类似于 "3/21/2024, 3:30:00 PM"
  1. toUTCString()
    • toUTCString()方法返回一个表示日期和时间的字符串,使用UTC时间。
    • 返回的字符串格式类似于"Wed, 21 Mar 2024 15:30:00 GMT"。
const today = new Date();
const utcString = today.toUTCString();
console.log(utcString); // 输出类似于 "Wed, 21 Mar 2024 15:30:00 GMT"

这些方法可以根据需要选择合适的日期和时间格式,并根据本地化需求或UTC时间显示日期。

五、JSON对象(重点掌握)

1、概述

JSON对象在JavaScript中是一个内置对象,用于处理JSON数据,实现了数据的序列化和反序列化。通过JSON对象,可以方便地在JavaScript中操作JSON数据。

在JavaScript中,JSON对象提供了两个核心方法来处理JSON数据:JSON.parse()JSON.stringify()。这两个方法允许你在JavaScript中解析和序列化JSON数据。

  • JSON.stringify(value): 将一个JavaScript值(通常是一个对象或数组)转换为一个JSON字符串。
  • JSON.parse(text): 将一个JSON字符串转换回一个JavaScript对象。

JSON.stringify() ----> dumps (序列化)
JSON.parse() ----> loads (反序列化)

2、 JSON.parse()

  • 从JSON字符串解析到对象

  • JSON.parse() 方法用于将 JSON 字符串解析为 JavaScript 对象。

语法如下:

JSON.parse(text[, reviver])
  • text:要解析的 JSON 字符串。
  • reviver (可选):一个转换结果的函数,可以按需转换解析出的结果。

示例:

var jsonStr = '{
	"name": "Alice", "age": 30
}';
var obj = JSON.parse(jsonStr);
console.log(obj.name); // 输出 "Alice"
console.log(obj.age); // 输出 30

3、 JSON.stringify()

  • 序列化对象到JSON字符串

  • JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。

语法如下:

JSON.stringify(value[, replacer[, space]])
  • value:要转换为 JSON 字符串的值。
  • replacer (可选):一个转换结果的函数或数组,用于选择性地过滤和转换结果。
  • space (可选):用于控制缩进和间距的空格字符串。

示例:

var obj = { 
    name: "Alice", age: 30 
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr); // 输出 '{"name":"Alice","age":30}'

4、注意事项:

  • JSON 中的字符串必须使用双引号。
  • JSON 不支持注释。
  • JSON 键名必须是字符串。
  • JSON 值可以是字符串、数字、布尔值、数组、对象、null。

在Web开发中,JSON经常用于前后端的数据交换,例如通过AJAX请求从服务器获取数据,或者将数据发送到服务器。由于JSON是文本格式,因此可以轻松地通过HTTP协议进行传输。

六、RegExp对象

JavaScript中的RegExp对象是用于匹配正则表达式的字符串。正则表达式是一个强大的工具,用于在文本中搜索特定的模式。

1、创建RegExp对象

创建RegExp对象有两种主要方法:

(1)字面量语法(比较麻烦)

let regex = /pattern/flags;

这里pattern是要匹配的模式,而Flags是可选的,表示正则表达式的行为(例如是否区分大小写、是否全局匹配等)。

// 字面量语法
let regex1 = /hello/i; // 不区分大小写的匹配 "hello"

(2)构造函数语法(推荐使用)

let regex = new RegExp('pattern', 'Flags');

在这里,pattern是一个字符串,表示要匹配的模式,而Flags是一个字符串,包含标志(flags),这些标志指定了正则表达式的行为。

// 构造函数语法
let regex2 = new RegExp('world', 'g'); // 全局匹配 "world"

2、RegExp对象的属性和方法

(1)属性

  • global: 布尔值,表示是否设置了g标志(全局搜索)。
  • ignoreCase: 布尔值,表示是否设置了i标志(不区分大小写)。
  • multiline: 布尔值,表示是否设置了m标志(多行模式)。
  • source: 正则表达式的源文本(即模式字符串)。
  • lastIndex: 整数,表示下一次匹配的开始位置。
  • flags: 字符串,表示正则表达式的标志(如gi)。
  • dotAll: 布尔值,表示是否设置了s标志(点号匹配任何字符)。
  • sticky: 布尔值,表示是否设置了y标志(粘性搜索)。
  • unicode: 布尔值,表示是否设置了u标志(Unicode模式)。

(2)方法

  • test(string): 返回一个布尔值,表示正则表达式是否在指定的字符串中找到了匹配项。

  • exec(string): 在指定的字符串中执行搜索匹配,返回一个数组,包含了匹配项的结果。如果没有匹配项,则返回null。

  • match(str):返回字符串str中与正则表达式匹配的结果数组。

  • search(str):返回字符串str中第一个匹配的索引,如果没有找到则返回-1。

  • replace(str, replacement):在字符串str中使用replacement替换与正则表达式匹配的部分。

(3)示例

var regex = /hello/;
var str = "hello world";

// 使用 test 方法
console.log(regex.test(str)); // 输出true

// 使用 exec 方法
console.log(regex.exec(str)); // 输出["hello", index: 0, input: "hello world", groups: undefined]

// 使用 match 方法
console.log(str.match(regex)); // 输出["hello", index: 0, input: "hello world", groups: undefined]

// 使用 search 方法
console.log(str.search(regex)); // 输出0

// 使用 replace 方法
console.log(str.replace(regex, "hi")); // 输出"hi world"

3、正则表达式标志

(1)概述

  • g: 全局搜索,不仅返回第一个匹配项,还继续查找字符串中的所有匹配项。

  • i: 不区分大小写搜索。

  • m: 多行模式,^和$分别匹配字符串的开始和结束,以及任何行的开始和结束。

  • y: 粘性搜索,要求匹配必须从目标字符串的当前位置开始。

  • u: Unicode模式,正确处理四个字节的UTF-16编码。

  • s: 点号(.)匹配任何字符(包括\n和\r)。

(2)使用示例

// 正则表达式标志
let regexFlags = /apple/gi; // 不区分大小写且全局搜索 "apple"
console.log(regexFlags.test('Apple pie')); // true
console.log(regexFlags.test('apple pie')); // true

请注意,RegExp对象是不可变的,一旦创建了一个RegExp对象,就不能改变它的源模式或标志。如果需要不同的搜索行为,必须创建一个新的RegExp对象。

'''
在python中如果需要使用正则,需要借助于re模块
在js中需要你创建正则对象
'''
# 第一种  有点麻烦
let reg1 = new RegExp('^[a-zA-Z][a-zA-Z0-9]{5,11}')

# 第二种 个人推荐
let reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/

# 匹配内容
reg1.test('quanhaodsb')
true
reg2.test('quanhaodsb')
true

# 题目 获取字符串里面所有的字母s
let abc = 'quandsb dsb dsb'
abc.match(/s/)  # 拿到一个就停止了
['s', index: 5, input: 'quandsb dsb dsb', groups: undefined]
abc.match(/s/g)  # 全局匹配,g就表示全局模式
(3) ['s', 's', 's']

# 全局匹配模式吐槽点
let reg3 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/g
reg3.test('quandsb')  # 全局模式有一个lastIndex属性
true
reg3.test('quandsb')
false
reg3.test('quandsb')
true
reg3.test('quandsb')
false
reg3.lastIndex
0
reg3.test('quandsb')
true
reg3.lastIndex
7

# 吐槽点2
let reg4 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/
reg4.test()
true
reg4.test(undefined)
true
let reg5 = /undefined/
reg5.test('xiao')
false
reg5.test()
true

总结:在用js书写正则的时候一定要注意上述问题

七、Math对象

JavaScript中的Math对象是一个内置的全局对象,用于执行数学计算。以下是Math对象的一些常用属性和方法:

(1)常用属性

  • Math.PI:表示圆周率π的近似值,约为3.14159。
  • Math.E:表示自然对数的底e的近似值,约为2.71828。

(2)常用方法

  • Math.abs(x):返回x的绝对值。
  • Math.round(x):将x四舍五入为最接近的整数。
  • Math.floor(x):返回小于或等于x的最大整数。
  • Math.ceil(x):返回大于或等于x的最小整数。
  • Math.min(x1, x2, ...):返回参数中的最小值。
  • Math.max(x1, x2, ...):返回参数中的最大值。
  • Math.sqrt(x):返回x的平方根。
  • Math.pow(x, y):返回x的y次幂。
  • Math.random():返回一个0到1之间的随机数。
  • Math.sin(x)Math.cos(x)Math.tan(x):分别返回x的正弦、余弦和正切值(x为弧度)。
  • Math.log(x):返回x的自然对数。
  • Math.exp(x):返回e的x次幂。

(3)示例

console.log(Math.PI); // 输出圆周率π的值
console.log(Math.abs(-5)); // 输出5
console.log(Math.round(3.7)); // 输出4
console.log(Math.floor(3.7)); // 输出3
console.log(Math.ceil(3.2)); // 输出4
console.log(Math.min(2, 5, 1)); // 输出1
console.log(Math.max(2, 5, 1)); // 输出5
console.log(Math.sqrt(16)); // 输出4
console.log(Math.pow(2, 3)); // 输出8
console.log(Math.random()); // 输出0到1之间的随机数

Math对象提供了许多常用的数学函数和常量,可以帮助进行各种数学计算。

标签:console,log,对象,前端,JavaScript,JSON,new,Math
From: https://www.cnblogs.com/xiao01/p/18087640

相关文章

  • 前端基础之JavaScript函数
    一、什么是函数在JavaScript中,函数是一种可重复使用的代码块,用于执行特定任务或计算。函数可以接受参数,执行特定的操作,并返回一个值。二、函数的声明函数可以通过函数声明、函数表达式或箭头函数来定义。函数声明:functionfunctionName(parameters){//函数体......
  • JavaScript 实现通过 id 数组获取可展示的 name 拼接字符串
    JavaScript实现通过id数组获取可展示的name拼接字符串场景有一个包含许多对象的数组,每个对象都包含了一个标识(id)和一个名称(name)。想要从这个数组中选出特定的一些对象,这些对象的标识(id)在另一个数组中已经给出。然后,想把这些选出来的对象的名称(name)连接成一个字符串,用逗号分......
  • 测试面经 之 如何判断 Bug 是前端问题还是后端问题
    常见软件测试问题,如何判断一个Bug是Bug,并且如何判断该bug是前端问题还是后端问题。1.记录Bug:首先,作为一个专业的测试,无论该bug怎样,是否太浅显,都需要及时记录该问题。将该问题的标题,问题描述,复现步骤,环境版本,测试环境,测试账号,服务器端日志,报错截图,接口入参和......
  • 将字段转驼峰,获取对象中的属性值
    //获取对象中属性的值publicStringgetFieldValue(StringattrName)throwsNoSuchMethodException,InvocationTargetException,IllegalAccessException{//转驼峰StringstandardField=getStandardField(attrName.toLowerCase());......
  • [踩坑回顾]前端项目打包编译之后,页面访问异常:exports is not defined.
    周一遇到的问题,是qiankun框架的一个vue2子项目,使用yudao开源框架二次开发。 排查:1.开发环境正常。2.项目迁移前使用的babel、package配置均未被使用过。3.考虑打包使用的命令错误。发现未按照官方教程使用npm进行编译,后端同事用pom.xml文件使用pnpm命令进行编译。 解......
  • C++ 对象模型
    1.普通类对象是什么布局?structBase{Base()=default;~Base()=default;voidFunc(){}inta;intb;};intmain(){Basea;return0;}2.带虚函数的类对象是什么布局?structBase{Base()=default;virtual~Base()......
  • 构造方法、private - 私有化、this - 本对象、封装 -set、get方法、分包
     1.构造方法含义:与类名相同,且没有返回项的方法作用:1.和new关键字一起是创建对象:比如Personp=newPerson()2.初始化数据:Personp=newPerson("张三",'男',23);注意:1.创建对象的过程称之为实例化2.一般系统会默认实现无参构造,但是如果类中有有参构造,系统......
  • 3、模板渲染及对象属性访问
    代码如下:fromflaskimportFlask,render_templateapp=Flask(__name__)#定义类用于参数传递classUser:"""对于参数age是后续加上去的,因为前期已经对于类进行过实例化了,所以在增加参数时,最好给上一个默认值.不然之前的写法都要重新修改."""......
  • 前端学习-vue学习009-侦听器
    官方教程链接侦听器:import{ref,watch}from'vue'constcount=ref(0)watch(count,(newCount)=>{console.log(`newcountis:${newCount}`)})pre标签:识别json对象中的\n\t等转义字符,展示原始的JSON对象结构。v-ifv-elseasyncawaitfetch<template>......
  • Java基础内容:第七章面向对象(下)编程题详解
            建了一个群:908722740 ,欢迎小伙伴门的加入,平时可以互相学习交流,不管是学习还是工作上的都可以多多交流,本人在校学生,技术有限,错误的地方欢迎指正。目录一、多态案例素材【1】乐手弹奏乐器【2】比萨制作【3】购买饮料二、接口案例素材【1】兔子和青蛙【......