Qt中常见的JS类和函数(一)

相关系列文章

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

目录

1.引言

2.全局对象(The Global Object)

2.1.值属性(Value Properties)

2.1.1.NaN

2.1.2.Infinity

2.1.3.undefined 

2.2.函数属性(Function Properties)

2.2.1.eval(x)

2.2.2.parseInt(string, radix)

2.2.3.parseFloat(string)

2.2.4.isNaN(number)

2.2.5.isFinite(number)

2.2.6.encodeURI(uri)

2.2.7.decodeURI(encodedURI)

2.2.8.encodeURIComponent(uriComponent)

2.2.9.decodeURIComponent(encodedURIComponent)

2.2.10.escape(string)

2.2.11.unescape(string) 


1.引言

        由于qml是js的拓展,可以在qml中创建js的对象,js的对象有数组,日期,算数,逻辑,正则表达式,对象,都需要使用new来创建,创建的名字也是固定的,固定的名字可以调用js的内建方法。

        在qml中和qt中的QJSEngine类都可以使用js中的对象和函数,而且使用起来特别的方便。如:

 QJSEngine myEngine;QJSValue three = myEngine.evaluate("1 + 2");

而且qt也可以很轻松的调用js定义的函数,如下示例:

 QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })");QJSValueList args;args << 1 << 2;QJSValue threeAgain = fun.call(args);

下面就来详细的介绍qt中能使用的对象和函数

2.全局对象(The Global Object)

2.1.值属性(Value Properties)

2.1.1.NaN

代表非数字,是当结果应为数字但结果未定义或不能表示为数字时,JavaScript 从某些函数和操作返回的值,NaN是一个特殊的数字值(typeof NaN的结果为number),是not a number的缩写,表示不是一个合法的数字,如:

//[1]
Number('fefww') // NaN
Number(undefined) // NaN//[2]
parseInt('abc', 10) //NaN, parseInt() 如果解析失败返回 NaN 
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
Math.acos(2)  // NaN

注意:NaN是唯一一个和自身不相等的值,如 NaN === NaN // false

2.1.2.Infinity

Infinity(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大。无穷可以分为两种,正无穷和负无穷,JS 中对应的表示方式为:+Infinity(或者Infinity) 和 -Infinity。

这意味着Infinity和-Infinity(小于任何有限数的数字)都是number类型的特殊值:

typeof Infinity; // => 'number'
typeof -Infinity; // => 'number'

Infinity比任何有限数都大。如:

Infinity > 100;                     // => true
Infinity + 1;        // => Infinity
Infinity + Infinity; // => Infinity
10 / Infinity; // => 0
2 / 0; // => Infinity

对无穷数进行概念上不正确的运算会得到NaN。 例如,不能除以无限数,也无法确定无限数是奇数还是偶数:

Infinity / Infinity; // => NaN
Infinity % 2;        // => NaN

2.1.3.undefined 

undefined既是JavaScript中的原始数据类型之一,也是一个原始值数据。导致undefined的常见场景有:

1)未初始化变量和访问不存在的属性。如

//[1]
var obj;
console.log(typeof obj); //undefined//[2]
var obj1 = {name: 'conan';
}
//使用属性选择器obj1.age访问不存在的属性age将被计算为`undefined`;

本身访问不存在的属性不会引发错误,但是尝试从不存在的属性中获取数据时就会发生出问题。

因此它可以用来检查属性是否存在:

a、obj.name !== undefined : 直接与undefined 进行比较
b、typeof obj.name !== 'undefined': 验证属性值类型
c、obj.hasOwnProperty(‘name’) : 验证对象是否具有自己的属性 仅在对象自己的属性中进行验证
d、'name' in obj : 验证对象的是否具有自己的属性或继承属性

建议使用in操作符,它的语法短小精悍。in操作符的存在表明一个明确的意图,即检查对象是否具有特定的属性,而不访问实际的属性值。

2)函数返回值

隐式地, 没有return 语句, JS函数返回undefined.

3)未定义的数组

访问越界索引的数组元素时,会得到undefined。如:

var arr = [name, age, desc];
arr[6];  //=> undefined

注意:undefined 和 null 之间的区别

两个特殊值都表示空状态,主要区别在于undefined 表示尚未初始化的变量的值,null 表示故意不存在对象。

如:

//[1]
var num;
console.log(num);//undefined
// num 变量未定义,这清楚的表明未初始化的变量。//[2]
undefined == null; //true
undefined === null; //false

2.2.函数属性(Function Properties)

2.2.1.eval(x)

eval(x)可以接受一个字符串x作为参数,并把这个参数作为脚本代码来执行。

1)  如果参数是一个表达式,eval() 函数将执行表达式。
2)  如果参数是Javascript语句,eval()将执行 Javascript 语句。

如果执行结果是一个值就返回,不是就返回undefined,如果参数不是一个字符串,则直接返回该参数

示例如下:

eval(“var b=1222”);//声明一个变量b并赋值1222。
eval(“55+366”);//执行加运算,并返回运算值。
eval(“test()”);//执行test()函数。
eval("{a:2}");//声明一个对象。如果想返回此对象,则需要在对象外面再嵌套一层小括如下:eval("({a:2})");

2.2.2.parseInt(string, radix)

         解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。parseInt函数将其第一个参数转换为一个字符串,对该字符串进行解析,然后返回一个整数或 NaN。示例如下:

parseInt("123");//123<br>
parsrInt("-123");//-123<br>
parseInt("123wffee")//123<br>
parseInt("123efe123")//123 <br>
parseInt("12333vwewe")//123<br>
parseInt("123vwevweg123")//123 <br>
parseInt("0.05");//5
parseInt("5e-2");//5
parseInt("Cwewefw666")//NaN

注意事项:

  • 若传入的string不是字符串,则会默认使用tostring()函数来将传入的内容转化为字符串。
  • 若字符串以0x或0X开头则以16进制解析。
  • 若字符串以0开头则以10进制解析。
  • 若传入的为数字,且开头为0,则以八进制解析。
  • 若传入值以0b或0B开头(不加引号),则以二进制解析。

2.2.3.parseFloat(string)

        解析一个字符串,并返回一个浮点数。该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。如果在解析过程中遇到了正负号(+ 或 -)、数字 (0-9)、小数点,或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。同时参数字符串首位的空白符会被忽略。示例如下:

parseFloat('3.14') // 3.14
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14
parseFloat('3.14more non-digit characters') // 3.14
parseFloat('\t\v\r12.34\n ') // 12.34
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN

注意事项:

  • parseFloat方法是将字符串进行转化为浮点数
  • 字符串中符合科学计数法则会进行转化
  • 字符串中中包含不能转化为浮点数的字符,那么就将已经转化好的部分返回
  • parseFloat会自动过滤字符串前后空格
  • 如果参数不是字符串,或者第一个字符不能转化为浮点数,那么返回NaN
  • parseInt不同于Number

2.2.4.isNaN(number)

isNaN()来判断一个数值是不是一个非数字(并不是用来判断是不是NaN这个值)。如:

isNaN(NaN)  // true
isNaN(10)  // false

为什么说isNaN()不是用来判断是不是NaN这个值的呢?因为isNaN对非数字不起作用,它首先做的就是把这些值转换成数字,转换的结果可能为NaN,然后函数会错误地返回true

isNaN('abc')  // true

所以我们想确定这个一个值是为NaN,可以使用以下两种方法:

//[1] 将isNaN()和typeof结合来判断
function isValueNaN(value) {return typeof value === 'number' && isNaN(value)
}//[2] 值是否与本身不相等(NaN是唯一有这样特征的值)
function isValueNaN(value) {return value !== value
}

2.2.5.isFinite(number)

此函数用来判断被传入的参数值是否为一个有限数值(finite number),如果参数是 NaN,正无穷大或者负无穷大,会返回 false,其他返回 true。如:

document.write(isFinite(123)+ "<br>");  //true
document.write(isFinite(-1.23)+ "<br>"); //true
document.write(isFinite(5-2)+ "<br>"); //true
document.write(isFinite(0)+ "<br>");  //true
document.write(isFinite("Hello")+ "<br>"); //false
document.write(isFinite("2005/12/12")+ "<br>"); //false

2.2.6.encodeURI(uri)

对参数uri进行编码,uri为字符串。encodeURI()函数只对字符串中有意义的字符进行转义。例如将字符串中的空格转化为“%20”。如:

encode.js:

function endecode_test(){var uri = "http://127.0.0.1/test.html?name=张三&age=30";var encodeResStr =  encodeURI(uri);console.log(encodeResStr); console.log(decodeURI(encodeResStr)); 
}

encode.html:

<!DOCTYPE html>
<html>
<body>
<script src="./encode.js"></script><h1>JavaScript中的常用函数4:编码URI和解码URI</h1>
<p id="res">结果:</p>
<script>endecode_test();
</script></body>
</html>

运行结果在控制台可以看到:

encodeRes = http://127.0.0.1/test.html?name=%E5%BC%A0%E4%B8%89&age=30
encode.js:5

decodeRes = http://127.0.0.1/test.html?name=张三&age=30

2.2.7.decodeURI(encodedURI)

解码已经编码的字符串,是对encodeURI()函数的逆向操作。在这里我们不多讲了。

2.2.8.encodeURIComponent(uriComponent)

        uriComponent字符串作为 URI 组件进行编码;此方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。所谓组件,通常会被如下符号分割的字符串::;/?:@&=+$,# 。示例如下:

encode.js:

 function endecodeURIComponent_test(){var uri = "http://127.0.0.1/test.html?name=张三&age=30";var encodeResStr =  encodeURIComponent(uri);console.log("encodeRes = " + encodeResStr); console.log("decodeRes = " + decodeURIComponent(encodeResStr)); 
}

encode.html:

<!DOCTYPE html>
<html>
<body>
<script src="./encode.js"></script><h1>JavaScript中的常用函数4:编码URI和解码URI</h1>
<p id="res">结果:</p>
<script>endecodeURIComponent_test();
</script></body>
</html>

运行结果:

encodeRes = http%3A%2F%2F127.0.0.1%2Ftest.html%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D30
encode.js:12

decodeRes = http://127.0.0.1/test.html?name=张三&age=30

备注:encodeURIComponent()和encodeURI()的最主要区别是:前者对保留字符同样做转义编码,后者则不会

2.2.9.decodeURIComponent(encodedURIComponent)

解码已经编码的字符串,是encodeURIComponent()函数的逆向操作。在这里我们不多讲了。

2.2.10.escape(string)

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。如:

let str="Need tips? Visit RUNOOB!";
console.log(escape(str)) //Need%20tips%3F%20Visit%20RUNOOB%21
console.log(unescape(str)) //Need tips? Visit RUNOOB!

2.2.11.unescape(string) 

对字符串string进行解码,是对escape()的逆操作。在这里我们不多讲了。

总结:escape()encodeURI()encodeURIComponent()的区别

 escapeencodeURIencodeURIComponent
编码范围仅可识别 ASCII 字符集不包括特殊字符 #包括所有特殊字符
适用URL不适用用于编码整个URL用于编码URL中的参数部分
保留字符保留字符不会被编码保留字符如 :/?#[]@ 不会被编码所有非字母数字字符都会被编码
编码结果对特殊字符使用 % 编码%20 用于空格%20 用于空格; %21 用于 ! 等特殊字符
解码使用unescape()解码使用decodeURI()解码使用decodeURIComponent()解码
适用场景适用于旧版浏览器或特定需求(性能较差)编码整个URL(包含协议、域名、路径等)以防止URL被解释错误编码URL中的参数部分,确保可传递特殊字符

 

 

 

 

 

 

 

 

 

 

 

 

后面继续写。。。

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

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

相关文章

浏览器---浏览器/http相关面试题

1.localStorage和sessionStorage 共同点&#xff1a;二者都是以key-value的键值对方式存储在浏览器端&#xff0c;大小大概在5M。 区别&#xff1a; &#xff08;1&#xff09;数据有效期不同&#xff1a;sessionStorage仅在当前浏览器窗口关闭之前有效&#xff1b;localStorag…

wps电子表格(xlsx)在excel打开时,多余图形(shapes)的处理

背景&#xff1a; 1. win10, excel 打开 wps 生成的 xlsx文档&#xff1b; 2. 文档中有多余的图形,经检测为shape大类&#xff1b; 3. 文档中可见的图形可以全选后删除&#xff1b; 但是不可见部分仍然存在&#xff1b; 4. vba删除时&#xff0c;可以直接循环删除&#xff…

Eigen:Vector3d 变量初始化遇到的问题

Eigen:Vector3d 变量初始化遇到的问题 2024.2.22 日 &#xff0c;在使用 Eigen:Vector3d 这个类型的 变量&#xff0c;在类中进行初始化时 遇到了如下问题&#xff1a; 首先在类的声明内部&#xff0c;是不能声明完&#xff0c;再给变量赋值的&#xff0c;不管是 Eigen:Vector…

【 Flutter】安装、运行坑记录

运行demo报错 Exception in thread “main” java.net.ConnectException: Connection timed out: connect原因&#xff1a;网络问题&#xff0c;gradle包未能下载 解决方案&#xff1a;配置android studio代理&#xff0c;重新打开项目&#xff0c;as会自动下载缺失依赖

(done) 如何判断一个矩阵是否可逆?

参考视频&#xff1a;https://www.bilibili.com/video/BV15H4y1y737/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这个视频里还暗含了一些引理 1.若 AX XB 且 X 和 A,B 同阶可逆&#xff0c;那么 A 和 B 相似。原因&#xff1…

服务器防火墙的应用技术有哪些类型?

随着互联网的发展&#xff0c;网络安全问题更加严峻。服务器防火墙技术作为一种基础的网络安全技术&#xff0c;对于保障我们的网络安全至关重要。本文将介绍服务器防火墙的概念和作用&#xff0c;以及主要的服务器防火墙技术&#xff0c;包括数据包过滤、状态检测、代理服务、…

安卓开发:挑战每天发布一个封装类02--Wav录音封装类AudioChannel 1.0

简介 库名称&#xff1a;AudioChannel 版本:1.0 由于项目需求录音并base64编码存到服务器中&#xff0c;就顺手改装了一个别人的封装类 原封装类地址:Android AudioRecord音频录制wav文件输出 - 简书 (jianshu.com) 描述&#xff1a;此封装类基于AudioRecord实现wav的音频…

Springcloud OpenFeign 的实现(二)

Springcloud OpenFeign 的实现&#xff08;一&#xff09; 一、Feign request/response 压缩 您可以考虑为您的外部请求启用请求或响应GZIP压缩。您可以通过启用以下属性之一来完成此操作&#xff1a; feign.compression.request.enabledtrue feign.compression.response.en…

WEB相关工具(wget、curl、ab)

目录 一、wget 1、wget基本语法 2、wget帮助的更多选项 二、curl 1、curl基本语法 2、curl命令下载 3、curl命令基本用法 3.1 curl伪装 3.2 提取状态码 3.3 提取本地IP地址 3.4 提取远端服务器IP地址 3.5 提取本地端口 3.6 提取远端服务器端口 三、压力测试工具…

K8S NFS持久存储配置

K8S NFS持久存储配置 在Kubernetes&#xff08;K8S&#xff09;中配置NFS&#xff08;Network File System&#xff09;作为持久存储通常涉及以下步骤&#xff1a; 1. 准备NFS服务器 首先&#xff0c;你需要一个运行NFS服务的服务器。这可以是Kubernetes集群中的一个节点&am…

通过Redis增减库存避坑

问题&#xff1a; 先执行get获取值&#xff0c;判断符合条件再执行incr、decr操作。在临界缓存失效的情况下&#xff0c;会默认赋值当前key为永不过期的0&#xff0c;再执行加减法&#xff0c;导致程序异常。 推荐解决方案&#xff1a; 1、限制接口频率&#xff1a;先incr&…

Unity xLua开发环境搭建与基础进阶

Unity是一款非常流行的游戏开发引擎&#xff0c;而xLua是一个为Unity开发者提供的Lua框架&#xff0c;可以让开发者使用Lua语言来进行游戏开发。在本文中&#xff0c;我们将介绍如何搭建Unity xLua开发环境&#xff0c;并进行基础进阶的学习。 环境搭建 首先&#xff0c;我们需…

高维数据的中介效应【中介分析】《R包:HIMA》

允许基于高级中介筛选和惩罚回归技术来估计和测试高维中介效应 Hima包浏览 高维中介示意图 图1. 在暴露和结果之间有高维中介的情况 本包的作用 在确定独立筛选和极小极大凹惩罚技术的基础上&#xff0c;采用联合显著性检验方法对调解效果进行检验。使用蒙特卡罗模拟研究来展…

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求&#xff0c;解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站&#xff1a;https://fanyi.so.com/# 要求&#xff1a;爬取360翻译数据包&#xff0c;实现翻译功能 所需第三方库 …

2024什么样的大路灯比较好?5大爆款落地灯推荐必看!

大路灯作为一个可以照明&#xff0c;让室内环境光线更加舒适的电器&#xff0c;能够减少用眼时不良光线带来的疲劳感&#xff0c;营造接近自然光的舒适光&#xff0c;受到很多家长的关注&#xff01; 但现在市面有很多不良商家推出的大路灯虚标参数&#xff0c;实际护眼性能很低…

线性代数:向量空间

目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2

深入浅出IGMP:掌握多播通信的关键技术

1. IGMP的基本概念 IGMP是用于IPv4网络的通信协议&#xff0c;它允许互联网协议&#xff08;IP&#xff09;主机报告其多播组成员身份给相邻的路由器。多播是一种网络传输机制&#xff0c;允许单个发送者向多个接收者发送信息。IGMP是实现多播组成员管理的关键技术之一&#x…

vue中使用AraleQRCode生成二维码

vue中使用AraleQRCode生成二维码 问题背景 本文介绍vue中生成二维码的一种方案&#xff0c;使用AraleQRCode来实现。 问题分析 &#xff08;1&#xff09;安装对应的依赖包 npm i arale-qrcode --save &#xff08;2&#xff09;完整代码如下: <template><!-…

解决docker中运行的jar包连不上前端程序

目录 检查端口映射 查看容器的 IP 地址 检查容器网络设置 防火墙和网络策略 前端程序配置 跨域资源共享 (CORS) 日志查看 连接问题通常涉及到网络配置和端口映射。确保你在 Docker 中运行的 JAR 包可以被前端程序访问&#xff0c;可以采取以下步骤来解决问题&#xff1a…

【webrtc】Paced Sending官方设计文档

官方pacing文档 https://chromium.googlesource.com/external/webrtc/+/master/modules/pacing/g3doc/index.mdpaced sending Paced Sending The paced sender, often referred to as just the “pacer”, is a part of the WebRTC RTP stack used primarily to smooth the flo…