2017-10-17 54 views
-2

我试图找出下面的代码行确实在Javascript:这是什么东西在Javascript焦炭= {3: ' - ',6: ' - '},TMP =“;

char = {3:'-',6:'-'}, tmp=''; 

我不承认这句法它是从这个代码块来:。

// obj.value = '?V6I0S7I5*5O5S1F2C[]3U4!'; 
function exampleFunction(obj) { 
    var val = obj.value.replace(/\D/g, ''), 
     char = {3:'-',6:'-'}, tmp=''; 
    for (var i = 0; i < val.length; i++) { 
     tmp += (char[i]||'') + val[i]; 
    } 
    obj.value=tmp; 
} 

我试图找出这个代码做什么和obj的价值是什么

+2

它只是一个对象字面'char'和'tmp'一个空字符串。 –

+0

'什么obj的值将be'输入几个数字与第3和第6位后一个连字符...所以607-555-1234 - 我beleive这是在纽约州好莱坞的电话号码 - 如果你打电话现在的数量,你不会相信接下来发生的事情 –

+0

谢谢...它是如何从原始的字符串剥离的数字?我猜这些字符/ \ D/g是替换函数的参数吗?我知道/ g是让它在全球范围内找到所有事件。但其他人做了什么?我认为它正在寻找那些用''代替的字符。同样用char的怪异代码,这是否意味着char文字对象只有索引3和6?如果是这种情况,当循环时不会产生错误,并且i的值不是char中的索引? – valhalla

回答

0

线有问题的代码是声明2个局部变量并分配值对他们来说。

逗号前面的代码声明了一个名为char的变量并为它分配了具有两个属性的对象字面值。逗号后面的代码声明一个名为tmp的变量并为其分配一个空字符串。

您应该阅读本文;这将有帮助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Object_literals

+0

感谢您回应....我问起这个更在我的评论第一响应.... – valhalla

1

这是一种简短的书写变量的方式,无需再次声明var

function exampleFunction(obj) { 
    var val = obj.value.replace(/\D/g, ''), 
     char = {3:'-',6:'-'}, tmp=''; 
    for (var i = 0; i < val.length; i++) { 
     tmp += (char[i]||'') + val[i]; 
    } 
     obj.value=tmp; 
} 

相同

function exampleFunction(obj) { 
    var val = obj.value.replace(/\D/g, ''); 
    var char = { 
     3: '-', 
     6: '-' 
    } 
    var tmp = ''; 
    for (var i = 0; i < val.length; i++) { 
     tmp += (char[i]||'') + val[i]; 
    } 
    obj.value=tmp; 
} 

更新

你正在做一些正则表达式在这行代码替换。

var val = obj.value.replace(/\D/g, ''); 

从本质上讲,你正在使用正则表达式元字符\D找到任何非数字字符的所有事件,并与''替换它们。

char对象可能是电话号码中的仪表板支架。 ex. 123-123-1234 破折号在之间位置3 & 46 & 7在电话号码字符串中。

var char = { 
    3: '-', 
    6: '-', 
} 

var tmp = ''; 
for (var i = 0; i < val.length; i++) { 
    tmp += (char[i] || '') + val[i]; 
} 
obj.value = tmp; 

这个循环基本上占位符-用值在val[i]组合。

char[i]不会在循环中失败(它的确如此),因为它在逻辑上与空字符串或。如果char[i]不存在,则它将是一个空字符串。

如果你通过它

// obj.value = '?V6I0S7I5*5O5S1F2C[]3U4!'; 
function exampleFunction(obj) { 
    var val = obj.value.replace(/\D/g, ''), // obj.value = 6075551234 
     char = {3:'-',6:'-'}, tmp=''; 
    for (var i = 0; i < val.length; i++) { 
     tmp += (char[i]||'') + val[i]; 
     // Iterations: 
     // 0. tmp = "6"; 
     // 1. tmp = "60"; 
     // 2. tmp = "607"; 
     // 3. tmp = "607-5"; <- char[i] exists, so add a '-' + val[i]; 
     // 4. tmp = "607-55"; 
     // 5. tmp = "607-555"; 
     // 6. tmp = "607-555-1"; <- char[i] exists, so add a '-' + val[i]; 
     // 7. tmp = "607-555-12"; 
     // 8. tmp = "607-555-123"; 
     // 9. tmp = "607-555-1234"; 
    } 
     obj.value=tmp; 
} 

基本步骤运行,你应该看到事情的代码,你解析给定的obj.value并删除所有非数字字符,并从它建立一个电话号码。

所以,obj.value = ?V6I0S7I5*5O5S1F2C[]3U4!在开始和 obj.value = 607-555-1234在这个程序结束。

+0

感谢您回应....我问这个更我的评论第一响应.... – valhalla

+0

@valhalla检查我的更新答案 – JustinJmnz

0

基本上对象

char = { 
    3: '-', 
    6: '-' 
} 

用于走索引,并返回该属性的值存在,否则它returnes用于添加到字符串的EMPTA字符串。

tmp += char[i] || ''; 

结果是与破折号该指数三至六个月的字符串。

+0

感谢您回应....我问起这个更在我的第一个反应评论.... – valhalla