扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
script language="javascript"
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的京口网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
!--
var a,b,sum=0;
a=prompt("第一个数","");
b=prompt("第二个数","");
for(i=a;i=b;i++)
{
sum=sum+parseInt(i,10);
}
alert(""+sum+"");
--
/script
我详细解释下:
正如你所看到的,我只是修改了sum=sum+i;代码,将它改为了sum=sum+parseInt(i,10);
这是因为i不是数字而是字符串,为什么呢,因为a=prompt("第一个数","");中prompt对话框都返回的是字符串,故a是字符串,for(i=a;i=b;i++)中,a赋予i,故i是字符串了。字符串进行+运算的时候,它的作用不再是数学上的意义了,而是连接连个字符串,所以它他只显示你输入2个数间的顺序。
了解了这个,再看数字和字符串进行+运算的情况,请记住,任何与字符串进行+运算都将 不是字符串的运算元 隐式转化为字符串再连接连个两个字符串。
结论,只有当数字不和字符串进行+运算时,+的作用才是数学意义上的求和,否则起连接字符串的作用。
推广:1、字符串与任何数据类型的数据执行+运算的将是连接字符串的作用。
2、数值与数值、布尔类型执行+运算,则是求和举个例子:
script language="javascript"
!--
var s=true;
alert(s+"1");
--
/script
是不是2呢,因为true表示1啊。
javascript中的对象按照键来自动排序是浏览器造成的,
经查V8的相关文档得出以下结论:
Chrome浏览器下创建的js对象数组会自动按照键排序、而FireFox不会。
比如:
例如输入:var a = {'a':'aaa','c':'ccc','b':'bbb'};
使用a是的输出则会变成:var a = {'a':'aaa','b':'bbb','c':'ccc'};
javascript这门脚本语言,多用于辅助性开发,位运算如非必要,不推荐使用。虽然位运算在高级语言里,有时候能优化性能。但毕竟javascript是一门解释性语言,位运算也是解释后执行,性能并没有突出。
有两种情况下,
1)宿主是v8之类的虚拟化的引擎,但就我对虚拟化的理解,位运算在虚拟机里,应该还是不如c语言等编译性语言的;
2)大面积矩阵式运算,这时候有时候会用到位运算。当然,位运算应该学通,这对内存,以及优化程序性能有帮助。
位运算通常配合二进制来学,比较快一点。可能比较绕人的是高位。中国很多概念式教程说的很烂,都喜欢装13(逼)的用异或取反等来解释,这是很不科学的。
位运算的高位在c语言等里面表现,取决于cpu指令;但在javascript里不是——至少不完全是。我没仔细研究过。
无论哪种语言。位运算的意义有两种
1)或、异或、取反、与,这种叫掩码式运算,主要应用在于给某二进制位进行验证、设置、改变状态(改变状态,其实也是设置)等;
2)是位移,这个在加密解密压缩等科学里面经常看到,平常程序的应用不是很多,或者我短路没想到。
考虑到兼容性的问题,我觉得javascript的整数不应该当作c语言等下的整数来看。你保不齐哪个引擎是32位或者是64位。32位和64位在位移的时候,有时候结果不同的。
所以我的结论是,javascript不要苛求位运算,能避免就避免。但位运算还是要好好学,建议借助于c语言等来学。
单学javascript是没有前途的,需要精通javascript的职业只有Web前端工程师,一般年薪在5-20万之间,但是需要学的东西很多HTML.CSS.JQuery.前端MVC.而且全部要精通(所有知识全部背下来),否则不会有超过10万的年薪。我就是搞Web开发的程序员,5年的经验告诉我,程序员靠的不是努力,是智商,是青春,所以如果你不是疯狂爱上了Javascript还是别踏入的为好,最有前途的路只有两条,一条经商,一条当官,其他都是平民,肺腑之言,请您采纳。
在掘金上碰到一个有趣的问题 true || false false这个结果是啥
答案是 true
why?
最初的结论是:的逻辑运算符的优先级高于||
然而最后结论是 短路运算 的结果。
: 表达式1 表达式2
|| : 表达式1 || 表达式2
又去查了一堆资料,又碰到个奇怪的问题。
再来个问题:
经过与一位Java同事的讨论,最后得出如下结论:
遇到||运算符,先去左边的表达式得出结果,如果结果为true,则不会去执行右边的表达式,则短路运算生效;如果结果为false,则去执行右边的表达式,再去根据两边的结果去执行||运算符
当同时存在多个||时,从左到右,一一执行上述规则。
最简单的办法自然是遍历,不过适当的分析题意可以提升效率,同时也提高自己的分析水平。
我对这个问题的思路是根据题意,居中的数字可以与4组数字组合成15,就是米字型,4角分别与3组数字组合成15,其他的则与两组数字组合为15,也就是得到如下的结论:
5是核心,2,4,6,8为4角,1,3,7,9占据其他位置。然后进一步推算获取其具体位置。
但是这种解法和遍历法有巨大的不同,就是遍历可以获得所有的组合结果,但是本解法在得到第一个解后就不再执行了。代码附录
var arr = [1,2,3,4,5,6,7,8,9];
var values = []; //能够结合成15的3个数字的全排列,结果是[[1, 5, 9], [1, 6, 8], [2, 4, 9], [2, 5, 8], [2, 6, 7], [3, 4, 8], [3, 5, 7], [4, 5, 6]]
for(var i = 0, l = arr.length; i l; i ++) {
var a = arr.shift();
for (var j = 0, lj = arr.length; j lj; j++) {
var b = arr[j];
for (var j2 = 0, lj2 = arr.length; j2 lj2; j2++) {
if (j2 j a + b + arr[j2] == 15) {
values.push([a, b, arr[j2]]);
}
}
}
}
var countTime = {};//计算每个数字出现的次数
for (var i = 0, l=values.length; i l; i ++) {
for (var j = 0, lj = values[i].length; j lj; j++ ) {
if (! countTime[values[i][j]]) countTime[values[i][j]] = 1;
else countTime[values[i][j]]++;
}
}
var features = {is4:[],is3:[], is2:[]}; //得到
for (var i in countTime) {
if (countTime[i] == 4) features.is4.push(i); //5
if (countTime[i] == 3) features.is3.push(i); // 2, 4, 6, 8
if (countTime[i] == 2) features.is2.push(i); // 1, 3, 7, 9
}
var k = parseInt(features.is4[0], 10)
var results = [[0,0,0],[0,k,0],[0,0,0]]; //核心数字此时已经求出
//固定4边(当然也可以先固定四角),推演证明先手固定的4个数字的位置不重要
for (var i = 0, l = features.is2.length;i l;i++) {
var a = parseInt(features.is2[i], 10);
for(var j = 0, lj = features.is2.length;j lj;j++) {
var b = parseInt(features.is2[j], 10);
if (j i a + b + k == 15) {
if (results[0][1]) {
results[1][0] = a;
results[1][2] = b;
} else {
results[0][1] = a;
results[2][1] = b;
}
}
}
}
//在5个数字位置固定的情况下遍历出结果
var l = features.is3.length;
for (var i1 = 0; i1 l; i1 ++) {
var a = parseInt(features.is3[i1], 10);
for (var i2 = 0; i2 l; i2 ++) {
if (i2 != i1) {
var b = parseInt(features.is3[i2], 10);
for (var i3 = 0; i3 l; i3 ++) {
if (i3 != i1 i3 != i2) {
var c = parseInt(features.is3[i3], 10);
for (var i4 = 0; i4 l; i4 ++) {
if (i4 != i1 i4 != i2 i4 != i3) {
var d = parseInt(features.is3[i4], 10);
if (a + results[0][1] + b == 15) {
if (a + results[1][0] + c == 15) {
if (b + k + c == 15) {
results[0][0] = a;
results[0][2] = b;
results[2][0] = c;
results[2][2] = d;
}
}
}
}
}
}
}
}
}
}
console.log(results);
打印结果为[[8, 1, 6], [3, 5, 7], [4, 9, 2]]
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流