前几天看到一个javascript 连续赋值的问题,运行了一下,结果出乎意料,发现这里的水真的有点深啊,连续赋值的底层机制,没有一本前端书籍有详细介绍的,自己做实验研究了一下,先来看结果: var a = {n: 1}var b = a;a.x = a = {n: 2}console.log("a.x:",a.x); //undefinedconsole.log("b.x:",b.x) //{n:2} 运行结果: a.x: undefined b.x: Object…
javascript的变态位运算 var a = "10" | 0; alert(a); alert (typeof a);结果为10,number. 这就是说这条语句可以将字符串转化为number. 如果:var a = "sss" | 0;alert(a);结果为0.parseInt("sss")的话,会返回NaN.这个太强大了,就是说不管是啥都能转换为number... 比如:(function (){})| 0;({})| 0;([])|…
一.引子: }; a.x = a = {n:}; alert(a.x); // --> undefined 以上第二句 a.x = a = {n:2} 是一个连续赋值表达式.这个连续赋值表达式在引擎内部究竟发生了什么?是如何解释的? 二.猜想 猜想1:从左到右赋值,a.x 先赋值为{n:2},但随后 a 赋值为 {n:2},即 a 被重写了,值为 {n:2},新的 a 没有 x属性,因此为undefined.步骤如下1, a.x = {n:2};2, a = {n:2};这种解释得出的结果与实际…
引入 今天逛园子的时候看到一道javascript面试题,是关于连续赋值的,正好最近读jQuery源码经常看到这种连续赋值的表达式,所以很感兴趣. 废话不多说,来看题: var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x) 答案: console.log(a.x); // undefined console.log(b.x) //{n:2} 看到这个答案,我真是百思不得解.... 于是网上搜了搜…
解释一下下面代码的输出 console.log(0.1 + 0.2); //0.30000000000000004 console.log(0.1 + 0.2 == 0.3); //false JavaScript 中的 number 类型就是浮点型,JavaScript 中的浮点数采用IEEE-754 格式的规定,这是一种二进制表示法,可以精确地表示分数,比如1/2,1/8,1/1024,每个浮点数占64位.但是,二进制浮点数表示法并不能精确的表示类似0.1这样 的简单的数字,会有舍入误差.…
先看一个例子   ● var a = {n:1}; ● var b = a; ● a.x = a = {n:2}; ● console.log("a.x: " + a.x); //返回值:a.x: undefined ● console.log("a.n: " + a.n); //返回值:a.n: 2 ● console.log("b.x: " + b.x); //返回值:b.x: [object Object] ● console.log(&q…
*在js中不同类型之间的运算,所得到结果的类型也会有所变化: string + number = string string + boolean = string string + undefiend = string number + boolean = number number + undefiend = NaN boolean + undefiend = NaN 总结一下就是: 所有与string类型数据进行运算得到的结果一定是字符类型; 与number类型数据进行运算时,会将其它非st…
本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是指javascript中的类.例如:function Person(){} var p = new Person(); 这里的Person可以看作一个类,而p则是这个类的实例也可以称为对象. 这里主要分析js里面的四种属性. 私有属性,指定义在类中用var声明的,即var propertyName…
<head runat="server"> <title>JavaScript实现加法计算器</title> <script type="text/javascript"> function Sum() { var txtbox1 = document.getElementById("txtbox1"); var txtbox2 = document.getElementById("txt…
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout(function() { alert('你好!'); }, 0); setInterval(callbackFunction, 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就会被…