`

浅谈js变量的弱引用类型所带来的问题

阅读更多

一,问题描述

     var old_id = 1, imgNum=5;

    $(".num-l a").click(function(){
         var num = $(this).html(); //假设此处为2
         old_id = num;
    });

    function doNextImage()
   {   
        var new_id = old_id+1; //new_id为21而不是预期的3
        if(new_id > imgNum) new_id = 1;
        alert(new_id ); //输出字符串21
    }

 

二,问题原因
    在js语法中,所有变量类型为弱引用类型;虽然在定义old_id变量时赋值为整数1,指定old_id为int型。但是在后续的赋值中 var num = $(this).html();old_id = num;由于num为字符串类型,所以old_id又变为字符串类型了,这才出现new_id的值不是我们预期的整数3,而是字符串21(相加操作变成字符串的拼接了)。从而带来了后续程序逻辑上的错误!!!
三,解决办法
var num = parseInt($(this).html()); //parseInt(),parseFloat()等都是js内置的函数,用于将字符串转换为数字型。
 
分享到:
评论

相关推荐

    浅谈js中子页面父页面方法 变量相互调用

    (1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面 之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 ...

    浅谈JS的基础类型与引用类型

    ECMAScript变量包含两种不同类型的值:基本类型值、引用类型值; 基本类型值:指的是保存在栈内存中的简单数据段; 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针...

    Javascript浅谈之引用类型

    引用类型(Reference type)引用类型是javascript中一种内部类型。它主要是当做一个指代,代替一个变量或者函数,当然在需要真实值时,又可以通过它寻找到真实值。 2.引用类型的结构引用类型的值时由两部分构成,一...

    浅谈javascript中基本包装类型

    为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean、Number和String。这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值得...

    浅谈js中的引用和复制(传值和传址)

    先讲一下很基础的东西,看看js中几种数据类型分别传的什么 引用:对象、数组、函数 复制:数字、布尔 字符串单独说明,因为它的特殊性,无法确定是传递引用还是复制数值(因为字符串的值是没法改变的,所以纠结这个...

    JavaScript数据操作_浅谈原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值。 首先明确,值和类型是两...

    javascript学习笔记_浅谈基础语法,类型,变量

    基础语法、类型、变量 非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1、用x != x ,当x为NaN时才返回true; 2、用isNaN(x) ,当x为NaN或非数字值时,返回true; 3、用isFinity(x),在x不是...

    浅谈JavaScript 函数参数传递到底是值传递还是引用传递

    在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备。那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,...

    浅谈JavaScript中面向对象的的深拷贝和浅拷贝

    理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型。 1、值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量。 例如:var num = 123 ;var num1=num; 表示...

    浅谈js 闭包引起的内存泄露问题

    在js闭包中,可以定义“局部变量”,但是外部去调用的话,尤其是反复调用赋值,会造成内存的大量开销。如何防止这种现象的发生?关于闭包还有没有类似的内存或效率问题需要注意?如何去规避? 内存问题可能是如下...

    浅谈JavaScript闭包

    最近朋友面试被问到了 JS 闭包的问题,本人一时语塞,想起了袁华的一句话:“这道题太难了,我不会做,不会做啊!”。 JS 闭包属于面向对象的一个重要知识点,特此本人又开始了一段说走就走的旅程。 闭包就是外层...

    javascript对浅拷贝和深拷贝的详解

    下面小编就为大家带来一篇浅谈JavaScript中面向对象的的深拷贝和浅拷贝。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。 1.浅拷贝:复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据。 ...

    浅谈javascript的闭包

    每次调用javascript函数的时候,都会为之创建一个新的对象来保存变量,把这个对象添那个加至作用域中,当函数返回时,就从作用域链中将这个绑定变量的对象删除,如果不存在嵌套函数,也没有其他引用指向这个绑定的...

    浅谈JavaScript异常处理语句

    程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止。运行时的错误统称为异常,为了能在错误...任何变量名,用于引用错误发生时的错误对象。 catchStatements:可选项。

    浅谈Javascript中的函数、this以及原型

    在Javascript中函数实际上就是一个对象,具有引用类型的特征,所以你可以将函数直接传递给变量,这个变量将表示指向函数“对象”的指针,例如: function test(message){ alert(message); } var f = ...

    浅谈JavaScript中null和undefined

    先说null,它表示一个特殊值,...undefined出现有4种情况:①变量声明但没有初始化时②要查询的对象属性或数组的元素不存在时③如果函数没有任何返回值,则返回undefined④引用没有提供实参的函数形参的值也只会得到und

    JavaScript网页特效应用开发手册

    第1章 Javascript浅谈 1-1什么是JavaScript? 1-2如何使用Javascript 1-3 Javascript和 HTML的搭配 1-4 JavascnPt和一般程序语言的差异 1-5 Javascnpt的限制 第2章 撰写Javascnpt 2-1 JavaScript要写在网页原始代码的...

    浅谈javascript中的闭包

    很长一段时间不理解闭包,后来了解了作用域,以及...其实这个代码不难理解,aaa是指向foo()返回的一个新函数,但是在这个函数里面引用了a变量,所以当执行完foo函数时,变量a还存在内存中不释放。即a分别为2和3。 函

    关于JS中的闭包浅谈

    个人见解:在函数体内定义另外的方法函数,而这个方法函数被函数以外的变量引用,这时就形成了闭包! 可能这样的理解也太抽象了,并不是那么简单易懂!实例吧: 代码如下:[removed] function A(){ var S=0; ...

    浅谈类似于(function(){}).call()的js语句

    (function(){…}).call(name) 其中红色的…....这段代码的实际意义可以认为:函数的具体实现对变量name的进行的改造,或者更简单的说函数的实现就是变量name的具体实现,某种意义上它等价于: var name = functi

Global site tag (gtag.js) - Google Analytics