Qt中常见的JS类和函数(二): 全局对象

Qt专栏: http://t.csdnimg.cn/YLlEd

相关系列文章

Qt中字符串转换为JS的函数执行

Qt中常见的JS类和函数(一): 全局对象

Qt中常见的JS类和函数(二): 全局对象

目录

2.3.构造函数属性

2.3.1.Object

2.3.2.Function

2.3.3.Array

2.3.4.ArrayBuffer

2.3.5.String

2.3.6.Boolean

2.3.7.Number

2.3.8.DataView

2.3.9.Date

2.3.10.Promise

2.3.11.RegExp

2.3.12.Map

2.3.13.Set

2.3.14.SharedArrayBuffer

2.4.其它属性

2.4.1.Atomics

2.4.2.Math

2.4.3.JSON

2.4.4.Reflect


2.3.构造函数属性

2.3.1.Object

        ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,ECMAScript 中的所有对象都由这个对象继承而来,Object也是平时使用最多的一个类型,虽然Object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。

        创建Object实例的方式有两种,第一种是使用new操作符后跟Object构造函数,如下所示:

var person = new Object();
person.name = "zdxiao";
person.age = 2;

        第二种是使用对象字面量表示,如下所示:

var person = {name: "zdxiao",age: 28
};

其他的功能会后面的详细讲解。

2.3.2.Function

函数实际上就是对象,每个函数都是Function类型的实例,而且都与其它引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数定义如下:

function  sum(num1, num2){return num1+num2;
}

这与下面使用函数表达式定义函数的方式相差无几。

var sum = function(num1, num2){return num1+num2;
};

还有一种定义函数的方式是使用Function构造函数。Function构造函数可以接受任意数量参数,但是最后一个参数始终都被看着是函数体,而前面的参数则枚举出了新函数的参数,语法如下:

var function_name = new function(arg1, arg2, ..., argN, function_body);

如下例子:

var  sum = new Function("num1", "num2", "return num1+num2"); //不推荐

这种写法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能,不过,这种语法对于理解"函数是对象,函数名是指针"的概念倒是非常直观的。

2.3.3.Array

数组,是个有序列表。数组可以存储对象,数组的大小是可以动态调整的。创建数组的方式有两种,一是使用Array构造函数,如:

var colors = new Array(); //创建一个空的数组
var colors = new Array(20); //创建一个大小为20的数组var colors = Array(2);  //创建一个大小为2的数组
var colors = Array("zdxiao");  //创建一个大小为1的数组

二是使用数组字面量表示,数组字面量由一对包含数组项的方括号表示,多个数组项之间用逗号隔开,如:

var colors = ["21414", "1412412", "fqwfqwf"];
var colors = [];
var colors = [1, 2, "322r23"];

2.3.4.ArrayBuffer

        ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。它是一个字节数组,通常在其他语言中称为“byte array”。

        你不能直接操作 ArrayBuffer 的内容,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。如下示例:

// create an ArrayBuffer with a size in bytes
const buffer = new ArrayBuffer(8);
console.log(buffer.byteLength);
// expected output: 8

2.3.5.String

String类型是字符串的对象包装类型,可以像下面这样使用String构造函数来创建。

var str = new String("23rt4erfegrth");

还可以直接使用字面量方式,如:

var str1 = 'hello';  //字面量声明方式

两种方式在使用上没有区别,但是在检测数据类型上是有一定的区别。

console.log(typeof str); //返回结果: 'string'
console.log(typeof o_str); //返回结果:'object' 

2.3.6.Boolean

Boolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 (true 或者false)。定义如下:

var a = new Boolean(false);
var b = true;

2.3.7.Number

Number 对象是原始数值的包装对象。定义如下:

var numberObject = new Number(10);

2.3.8.DataView

DataView视图是一个可以从二进制ArrayBuffer对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。语法:

new DataView(buffer[, byteOffset[, byteLength]]);//参数buffer一个已经存在的ArrayBuffer或Shared

2.3.9.Date

Date 对象用于处理日期与时间。以下四种方法同样可以创建 Date 对象:

var d = new Date();
var d = new Date(milliseconds); // 参数为毫秒
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
  • milliseconds 参数是一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,表示自 1970 年 1 月 1 日 00:00:00 UTC(the Unix epoch)以来的毫秒数。

  • dateString 参数表示日期的字符串值。

  • year, month, day, hours, minutes, seconds, milliseconds 分别表示年、月、日、时、分、秒、毫秒。

2.3.10.Promise

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。

2.3.11.RegExp

正则表达式是描述字符模式的对象。

正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

如:

var re = new RegExp("\\w+");
var re = /\w+/;

2.3.12.Map

Map是一组键值对的结构,具有极快的查找速度。定义如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
var n = new Map();

2.3.13.Set

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

注意数字3和字符串'3'是不同的元素。

2.3.14.SharedArrayBuffer

SharedArrayBuffer与ArrayBuffer的功能类似,SharedArrayBuffer 与 ArrayBuffer 具有同样的 API。二者的主要区别是 ArrayBuffer 必须 在不同执行上下文间切换,SharedArrayBuffer 则可以被任意多个执行上下文同时使用。

2.4.其它属性

2.4.1.Atomics

        JavaScript Atomics是一个原子操作库,它使多线程和共享内存的JavaScript编程变得更加容易和可靠。该库提供了一些原子数据类型、原子操作和同步原语,以便开发人员可以更加轻松地编写具有正确同步保证的并发JavaScript程序。

        这些原子操作属于 Atomics 模块。与一般的全局对象不同,Atomics 不是构造函数,因此不能使用 new 操作符调用,也不能将其当作函数直接调用。Atomics 的所有属性和方法都是静态的(与 Math 对象一样)。

JavaScript Atomics有以下原子数据类型:

  • Int8Array
  • Uint8Array
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • BigInt64Array
  • BigUint64Array

这些类型都是JavaScript的TypedArray类型,并支持原子操作。

JavaScript Atomics提供了以下原子操作:

  • Atomics.add()将指定位置上的数组元素与给定的值相加,并返回相加前该元素的值。
  • Atomics.and()将指定位置上的数组元素与给定的值相与,并返回与操作前该元素的值。
  • Atomics.compareExchange()如果数组中指定的元素与给定的值相等,则将其更新为新的值,并返回该元素原先的值。
  • Atomics.exchange()将数组中指定的元素更新为给定的值,并返回该元素更新前的值。
  • Atomics.isLockFree(size)可以用来检测当前系统是否支持硬件级的原子操作。对于指定大小的数组,如果当前系统支持硬件级的原子操作,则返回 true;否则就意味着对于该数组,Atomics 对象中的各原子操作都只能用锁来实现。此函数面向的是技术专家。
  • Atomics.load()返回数组中指定元素的值。
  • Atomics.notify()唤醒等待队列中正在数组指定位置的元素上等待的线程。返回值为成功唤醒的线程数量。
  • Atomics.or()将指定位置上的数组元素与给定的值相或,并返回或操作前该元素的值。
  • Atomics.store()将数组中指定的元素设置为给定的值,并返回该值。
  • Atomics.sub()将指定位置上的数组元素与给定的值相减,并返回相减前该元素的值。
  • Atomics.wait()检测数组中某个指定位置上的值是否仍然是给定值,是则保持挂起直到被唤醒或超时。返回值为 "ok"、"not-equal" 或 "time-out"。调用时,如果当前线程不允许阻塞,则会抛出异常(大多数浏览器都不允许在主线程中调用 wait())。
  • Atomics.xor()将指定位置上的数组元素与给定的值相异或,并返回异或操作前该元素的值。

下面是一个示例程序,展示如何使用Atomics在JavaScript中进行原子操作:

const sharedArray = new Int32Array(new SharedArrayBuffer(4));
Atomics.store(sharedArray, 0, 42);
console.log(Atomics.load(sharedArray, 0)); // 42
Atomics.add(sharedArray, 0, 2);
console.log(Atomics.load(sharedArray, 0)); // 44

在这个示例程序中,我们创建了一个具有一条整数的共享数组。然后,我们使用Atomics.store设置该数组的第一个元素为42。接下来,我们使用Atomics.add将值增加了2。最后,我们使用Atomics.load读取该值。该程序应该输出42和44。

2.4.2.Math

        Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math不是一个函数对象。与其他全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写法是 Math.PI,调用正余弦函数的写法是 Math.sin(x),x 是要传入的参数。Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。

        Math包中定义的主要函数会在后面详解

2.4.3.JSON

对象表示法,即键值对表示。基本单位是对象。{key:value}

全成JavaScript Object Notation。JS对象简谱。是一种轻量级的数据交换格式。使用JavaScript语法形式,长得很像JavaScript的Object,但是JSON格式仅仅是一个文本,数据类型String。这样,文本String可以被任何编程语言读取,解析,进而作为数据格式传递。

JSON 语法支持表示 3 种类型的值。
1)简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊值 undefined 不可以。如:

3333
“请问该如何体育”

        JavaScript 字符串与 JSON 字符串的主要区别是,JSON 字符串必须使用双引号(单引号会导致语法错误)。

  布尔值和 null 本身也是有效的 JSON 值。不过,实践中更多使用 JSON 表示比较复杂的数据结构,其中会包含简单值。

2)对象:对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。如:

let person = {name: "Nicholas",age: 29
};
let object = {		// js中属性名加上引号,等同于上面的效果"name": "Nicholas","age" : 29
};

但 JSON 中的对象必须使用双引号把属性名包围起来。
3)数组:数组表示可以通过数值索引访问的值的有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。如:

[25, "hi", true]

数组和对象可以组合使用,以表示更加复杂的数据结构。即数组中的元素可以是对象,或对象中的属性值可以为数组。如:

{
"sites":
[{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}]
}
//site这个key对应的value,是一个数组,3个站点记录的数组。

2.4.4.Reflect

Reflect 是一个内建的对象,用来提供方法去拦截 JavaScript 的操作。
Reflect 不是一个函数对象,所以它是不可构造的,也就是说它不是一个构造器,不能通过 new 操作符去新建或者将其作为一个函数去调用 Reflect 对象。
Reflect 的所有属性和方法都是静态的。

Reflect对象当前有 13 个静态方法。

// 对一个函数进行调用操作,同时可以传入一个数组作为调用参数。
Reflect.apply(target, thisArg, args)	
// 对构造函数进行 new 操作,相当于执行 new target(...args)。
Reflect.construct(target, args)
// 获取对象身上某个属性的值,类似于 target[name]。如果没有该属性,则返回undefined。
Reflect.get(target, name, receiver)
// 将值分配给属性的函数。返回一个Boolean,如果更新成功,则返回true。
Reflect.set(target, name, value, receiver)
// Reflect.defineProperty方法基本等同于Object.defineProperty,直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,不同的是,Object.defineProperty返回此对象。而Reflect.defineProperty会返回布尔值.
Reflect.defineProperty(target, name, desc)
// 作为函数的delete操作符,相当于执行 delete target[name]。
Reflect.deleteProperty(target, name)
// 判断一个对象是否存在某个属性,和 in 运算符 的功能完全相同。
Reflect.has(target, name)
// 返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 Object.keys(), 但不会受enumerable影响, Object.keys返回所有可枚举属性的字符串数组).
Reflect.ownKeys(target)
// 判断一个对象是否是可扩展的(是否可以在它上面添加新的属性),类似于 Object.isExtensible()。返回表示给定对象是否可扩展的一个Boolean 。(Object.seal 或 Object.freeze 方法都可以标记一个对象为不可扩展。)
Reflect.isExtensible(target)
// 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
Reflect.preventExtensions(target)
// 如果对象中存在该属性,如果指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),否则返回 undefined。类似于 Object.getOwnPropertyDescriptor()。
Reflect.getOwnPropertyDescriptor(target, name)
// 返回指定对象的原型.类似于 Object.getOwnPropertyDescriptor()。
Reflect.getPrototypeOf(target)
// 设置对象原型的函数. 返回一个 Boolean, 如果更新成功,则返回true。如果 target 不是 Object ,或 prototype 既不是对象也不是 null,抛出一个 TypeError 异常。
Reflect.setPrototypeOf(target, prototype)

示例如下:

// Reflect.apply
var obj1 = {};
Reflect.apply(Math.floor, obj1, [1.88]) // 1;// Reflect.construct
const obj2 = Reflect.construct(Date, [2021, 3, 1])// Reflect.get
var obj3 = { x: 1, y: 2 };
Reflect.get(obj3, "x"); // 1// Reflect.set
var obj4 = {};
Reflect.set(obj4, "prop", "value"); // true// Reflect.defineProperty(
const obj5 = {};
Reflect.defineProperty(obj5, 'property', {value: 666,writable: false
}); // true// Reflect.deleteProperty
var obj6 = { x: 1, y: 2 };
Reflect.deleteProperty(obj6, "x"); // true
obj; // { y: 2 }// Reflect.has
const obj7 = {x: 0}
Reflect.has(obj7, "x"); // true// Reflect.ownKeys
const obj8 = {z: 3, y: 2, x: 1}
Reflect.ownKeys(obj8); // [ "z", "y", "x" ]// Reflect.isExtensible
var obj9 = {};
Reflect.isExtensible(obj9); // true// Reflect.preventExtensions
var obj10 = {};
Reflect.isExtensible(obj10); // true
Reflect.preventExtensions(obj10);
Reflect.isExtensible(obj10); // false// Reflect.getOwnPropertyDescriptor
const obj11 = {x: "hello"}
Reflect.getOwnPropertyDescriptor(obj11, "x");
// {value: "hello", writable: true, enumerable: true, configurable: true}// Reflect.getPrototypeOf
var obj12 = {};
Reflect.getPrototypeOf(obj12); // 等同于Object.prototype// Reflect.setPrototypeOf
var obj13 = {};
Reflect.setPrototypeOf(obj13, null); // true

后面继续写。。。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

等保测评与商用密码共铸工控安全“双评合规”新篇章

最近听说了一个段子:“网络安全就像美女的内衣,等保和密评就是最贴身的内衣两件套,上下身一件都不能少。否则你的魔鬼身材(核心数据)就有可能被色狼(黑客)一览无余(数据泄漏&#xf…

linux系统消息中间件安装配置负载均衡器

负载均衡器 安装并配置负载均衡器安装并配置负载均衡器HA在其中一台服务器安装HAProxy修改 /etc/haproxy/haproxy.cfg 常见命令插件管理virtual_host管理用户管理其他使用命令:RabbitMQ 错误处理 安装并配置负载均衡器 注意:如果使用阿里云,可…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装(可选)安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量: Mean: 高斯分布中的μ值(平均值) Sensit: sensitivity,也就是1个Sigma的值; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

力扣 300. 最长递增子序列

题目来源:https://leetcode.cn/problems/longest-increasing-subsequence/description/ C题解1:动态规划 用两个循环,每到一个元素,就找它之前的最长递增子序列。 dp[i]表示第i个元素的最长递增子序列,里层遍历寻找之…

【python基础学习2】python可迭代对象iterator的特点,以及相关函数:zip(), map(), join() 和strip()方法等

目录 1 python里的可迭代对象 1.1 什么是可迭代对象 1.2 python里的可迭代对象 1.3 可迭代对象如何遍历 1.3.1 可迭代方法 1.3.2 迭代器的测试 1.4 python里的可迭代对象都不是向量,加法等是合并规则 1.5 可迭代对象不支持减法操作 1.6 可迭代器可以直接用…

STM32自学☞输入捕获测频率和占空比案例

本文是通过PA0口输出PWM波,然后通过PA6口捕获PWM波的频率和占空比,最终在oled屏上显示我们自己设置的频率和占空比。由于和前面的pwm呼吸灯代码有重合部分所以本文中的代码由前者修改而来,对于文件命名不要在意。 pwm_led.c文件 /* 编写步…

RubyMine 2023:让Ruby编程变得更简单 mac/win版

JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…

使用vuetify实现全局v-alert消息通知

前排提示,本文为引流文,文章内容不全,更多信息前往:oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件(像Element中的ElMessage那样)&#xf…

机器学习之特征缩放

特征缩放(Feature Scaling)是机器学习数据预处理中的一种方法,旨在将不同量级的数据变换到相同的尺度。这一步骤对于很多机器学习算法来说非常重要,因为算法的性能可能会因为特征的量级不同而受到影响。特征缩放可以提高算法的收敛…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…

Go命令源码文件

Go命令源码文件 命令源码文件的用途,怎样编写它? 命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的。如果一个源码文件声明属于 main 包,并且包含一个无参数声明且无结果声明的 main 函数,那么它就是…

[HackmyVM]靶场 Azer

kali:192.168.56.101 主机发现 arp-scan -l靶机:192.168.56.103 端口扫描 nmap -p- 192.168.56.103 开启了80 3000端口 看一下80端口 一直在那转,看源码也没什么有用的东西 扫一下目录 扫不到什么东西 看看另一个端口 是个登录界面 输入admin/admin测试 错误…

Kafka入门二——SpringBoot连接Kafka示例

实现 1.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

2-25算法习题总结

贪心问题 P1803 凌乱的yyy / 线段覆盖 凌乱的yyy / 线段覆盖 题目背景 快 noip 了&#xff0c;yyy 很紧张&#xff01; 题目描述 现在各大 oj 上有 n n n 个比赛&#xff0c;每个比赛的开始、结束的时间点是知道的。 yyy 认为&#xff0c;参加越多的比赛&#xff0c;no…

基于springboot+vue的学科平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

代码随想录三刷day13

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣151. 反转字符串中的单词二、力扣55. 右旋字符串&#xff08;第八期模拟笔试&#xff09;三、力扣28. 找出字符串中第一个匹配项的下标 前言 KMP主要应…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…

Mysql8.0 字符集

在8.0版本之前&#xff0c;MySQL默认的字符集为latin1&#xff0c;而8.0版本默认的字符集为utf8mb4。 latin1是ISO-8859-1的别名&#xff0c;有些环境下写作latin-1。ISO-8859-1编码是单字节编码&#xff0c;不支持中文等多字节字符&#xff0c;但向下兼容ASCII&#xff0c;其编…

学生信息的那些操作:(3)按姓名,查个人

有一学生成绩表&#xff0c;包括学号、姓名、3门课程成绩。请实现如下查找功能&#xff1a;输入一个学生的姓名&#xff0c;输出该学生学号、姓名、3门课程成绩 输入格式: 首先输入一个整数n(1<n<100)&#xff0c;表示学生人数&#xff1b; 然后输入n行&#xff0c;每…