关于js中字符串格式的数字的几个测试

简介:

前几天写js,跟踪调试时,发现误传了参数类型【原本需要的是number类型的,结果传递的实参却是string类型的】。结果居然没有产生异常,仍然顺利地执行了。

于是,今天特地做了几个测试。

(1)字符串类型数字的自加

/*
         *测试字符串类型数字的自加操作
         */
        function testStringSelfAdd() {
            var i = "0";
            for (var j = 0; j < 100; j++) {
                i++;
            }
            alert("i=" + i + "   " + "i的类型:" + (typeof i));
        }


测试结果:


此处可以看到,对字符串格式的数字进行自加操作时,变量类型会转变为number类型。运算上也具有了和number类型变量同样的行为。

接着再来看一下,是否字符"a"在做自加运算时,会被当做97(其ASCII值)?

/*
         *测试字符串类型数字的自加操作
         */
        function testStringSelfAdd() {
            //var i = "0";
            var i="a";
            for (var j = 0; j < 100; j++) {
                i++;
            }
            alert("i=" + i + "   " + "i的类型:" + (typeof i));
        }


测试结果:


可以看到,在做自加时,变量仍然会被转型。但是,此处并非我们预期的,转化为ASCII值,而是变成了NaN。说明,非数值形式的字符串不可用来进行这种运算。

事实上,也只是++运算符上产生了字符格式的数值可以被转型为number参与运算,而这里的i++并不等同于高级强类型语言中的i=i+1; 因为这里i原本就是字符串类型,所以这里的+会被重载为连接字符串。

测试:

 /*
         *测试字符串类型数字的自加操作
         */
        function testStringSelfAdd() {
            var i = "0";
            //var i="a";
            for (var j = 0; j < 100; j++) {
                //i++;
                i = i + 1;
            }
            alert("i=" + i + "   " + "i的类型:" + (typeof i));
        }


测试结果:



(2)测试字符串类型的数值和number类型的数值的比较操作:

/*
         *测试字符串的比较
         */
        function testStringCompare() {
            var i = 4;
            alert(i < "5");     //返回true
            alert("4" == 4);    //返回true
            alert("a" == 4);    //返回false
            alert("a" != 4);    //返回true
            alert("a" < 4);     //返回false
            alert("a" > 4);     //返回false
        }


可见,字符串格式的数值在和number类型的数值进行比较时和两个number类型的数值比较无异。

因此,希望大家,下次在用的时候还是不要依赖js运算符的这些“机制”。还是,要正确地检查类型,才能构建出更安全的代码。





原文发布时间为:2011-08-16


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
1月前
|
JavaScript 前端开发
JS几种拼接字符串的方法
JS几种拼接字符串的方法
48 1
|
1月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
135 56
|
13天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
人工智能 监控 JavaScript
模拟依赖关系和 AI 是Vue.js测试的下一个前沿领域
模拟依赖关系和 AI 是Vue.js测试的下一个前沿领域
29 1
|
1月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
43 3
|
1月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
28 0
|
1月前
|
JavaScript 前端开发
JavaScript - 测试 Prototype
JavaScript - 测试 Prototype
11 0
|
1月前
|
JavaScript 前端开发
JavaScript - 测试 jQuery
JavaScript - 测试 jQuery
14 0
|
2月前
|
JavaScript 前端开发 C++
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
|
2月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具