by Luiz Paulo
| junho 13, 2009
| 2 Comments »
Já estamos cansados de saber que javascript é totalmente dinâmico e podemos mudar facilmente o tipo das variáveis.
Uma das facilidades em javascript é a conversão de variáveis em inteiro, com a função parseInt().
Só que essa função tem uma pegadinha que pode atrapalhar bastante aos desatentos.
Sua sintaxe é bem simples como segue:
var number = "123456348965";
var integerNumber = parseInt(number);
alert(integerNumber); //123456348965
Nesse caso, tranquilo! Nenhum problema. Mas se, por exemplo, quisermos converter uma string "010" teremos problemas.
Veja o exemplo:
var number = "010";
var integerNumber = parseInt(number);
alert(integerNumber); //8
Isso acontece pois o número é automaticamente detectado como Octal.
Para resolver esse problema, a função parseInt pode receber 2 parâmetros.
parseInt(string, radix)
Onde:
string = String a ser transformada
radix = Numeral que você quer se basear (de 2 a 36)
Veja então como fica a solução para este problema:
var number = "010";
var integerNumber = parseInt(number, 10); //10 = base decimal
alert(integerNumber); //10
Pegadinha desvendada e problema resolvido!
Categorias: Desenvolvimento web, JavaScript, Linguagens
Tags: , code, javascript, pegadinha
by Luiz Paulo
| dezembro 4, 2008
| 5 Comments »
Veja abaixo algumas soluções para retirar espaços do início e final de strings.
Exemplos simples
Exemplo curto (funções com expressão regular):
//trim completo
function trim(str) {
return str.replace(/^\s+|\s+$/g,"");
}
//left trim
function ltrim(str) {
return str.replace(/^\s+/,"");
}
//right trim
function rtrim(str) {
return str.replace(/\s+$/,"");
}
alert(trim(" TEXTO "));
Exemplo curto (métodos da string com expressão regular):
Essa solução é bem mais elegante!
//trim completo
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g,"");
}
//left trim
String.prototype.ltrim = function () {
return this.replace(/^\s+/,"");
}
//right trim
String.prototype.rtrim = function () {
return this.replace(/\s+$/,"");
}
alert(" TEXTO ".trim());
Outras soluções
Exemplo longo
function trim (str)
{
var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
for (var i = 0; i < str.length; i++) { if (whitespace.indexOf(str.charAt(i)) == -1) { str = str.substring(i); break; } } for (i = str.length - 1; i >= 0; i--)
{
if (whitespace.indexOf(str.charAt(i)) == -1)
{
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) == -1 ? str : '';
}
Outro exemplo
function isWhitespace(charToCheck) {
var whitespaceChars = " \t\n\r\f";
return (whitespaceChars.indexOf(charToCheck) != -1);
}
//left trim
function ltrim(str) {
for(var k = 0; k < str.length && isWhitespace(str.charAt(k)); k++); return str.substring(k, str.length); } //right trim function rtrim(str) { for(var j=str.length-1; j>=0 && isWhitespace(str.charAt(j)) ; j--) ;
return str.substring(0,j+1);
}
//trim completo
function trim(str) {
return ltrim(rtrim(str));
}
Caso queira se aprofundar no assunto, aconselho a leitura do artigo Faster JavaScript Trim que mostra vários testes de performance no IE e FF.
Façam bom proveito!
Categorias: Desenvolvimento web, JavaScript, Linguagens
Tags: , code, example, javascript, trim
by Luiz Paulo
| novembro 14, 2008
| 15 Comments »
Essa semana, eu precisei de uma solução em Javascript para encontrar o "último dia do mês" ou "quantidade de dias do mês" como preferir. Consultei o Google e encontrei algumas soluções, algumas delas mais simples e outras bem criativas.
Achei o assunto interessante e resolvi divulgar aqui para quem precisar utilizar.
Primeiro vou postar as soluções sérias para o pessoal que está pesquisando e precisa utilizar em seu código
Soluções simples
Exemplo longo (função):
function daysInMonth(month,year) {
var m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (month != 2) return m[month - 1];
if (year % 4 != 0) return m[1];
if (year % 100 == 0 && year%400 != 0) return m[1];
return m[1] + 1;
}
Exemplo curto (função):
Aqui está a grande sacada do javaScript, que interpreta o 0(zero) como "o dia antes do dia primeiro" que obviamente é o último dia do mês anterior.
function daysInMonth(month,year) {
var dd = new Date(year, month, 0);
return dd.getDate();
}
Exemplo curto (inline):
var lastDay = (new Date(year, month, 0)).getDate();
Soluções criativas
Não se assustem, mas as soluções citadas abaixo funcionam!
Solução utilizando Switch:
function getLastDayOfMonth(month,year)
{
var day;
switch(month)
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:
case 12:
day = 31;
break;
case 4 :
case 6 :
case 9 :
case 11:
day = 30;
break;
case 2 :
if( ( (year % 4 == 0) && ( year % 100 != 0) ) || (year % 400 == 0) )
day = 29;
else
day = 28;
break;
}
return day;
}
Essa é legal
function anoBissexto(anoCompleto)
{
if(!(anoCompleto%4) && (anoCompleto%100 || !(anoCompleto%400))) return true;
return false;
}
function diasNoMes(mes,ano)
{
var var_type=typeof mes;
if(var_type != "number" && var_type != "string") return false;
if(var_type == "number" && (mes > 11 || mes < 0) && !isInt(mes)) return false;
var eng_args_allowed = "january-february-march-april-may-june-july-august-september-october-november-december";
var bra_args_allowed = "janeiro-fevereiro-marçomarco-abril-maio-junho-julho-agosto-setembro-outubro-novembro-dezembro";
var vet_eng_args_allowed = eng_args_allowed.split("-");
var vet_bra_args_allowed = bra_args_allowed.split("-");
var datahj = new Date();
var anohj = datahj.getFullYear();
var dias = [31,anoBissexto(ano)?29:28,31,30,31,30,31,31,30,31,30,31];
if(var_type == "string")
{
indice_eng = keyPosMatch(vet_eng_args_allowed,mes);
indice_bra = keyPosMatch(vet_bra_args_allowed,mes);
if(indice_eng>=0) return dias[indice_eng];
if(indice_bra>=0) return dias[indice_bra];
return false;
}
else return dias[mes];
}
Façam bom proveito!
Categorias: Desenvolvimento web, JavaScript, Linguagens
Tags: , calendar, code, date, example, javascript