Javascript – Pegadinha no parseInt()

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: , , ,

Yahoo! Apresentação sobre eventos Javascript

by Luiz Paulo | abril 24, 2009 | 1 Comment »

Acabei de baixar uma ótima apresentação realizada pelo Yahoo sobre eventos javascript, fonte: quirksMode.
A apresentação contém 95 páginas falando apenas sobre eventos javascript.

Resumo da apresentação: Em todos os browsers temos más implementações quando falamos de eventos javascript. "Mó obaoba" rsrs

Se você é fanático em javascript como eu, não deixe de ler.

Categorias: Browser, Desenvolvimento web, JavaScript, Linguagens
Tags: , ,

Javascript – Retirando espaços de string (função trim)

by Luiz Paulo | dezembro 4, 2008 | 6 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: , , , ,

Javascript – Último dia do mês

by Luiz Paulo | novembro 14, 2008 | 17 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: , , , , ,

CheatSheet – Guia rápido sobre Jquery

by Luiz Paulo | setembro 17, 2008 | 3 Comments »

O Cheat Sheet é um resumo de um assunto específico que pode ser utilizado como guia rápido. Nele você pode encontrar sintaxes, códigos, exemplos, conceitos e dicas.

Não podemos considerá-lo um manual completo pois é bem compacto, mas quebra bastante o galho! Além de úteis, normalmente são feitos com visual agradável, podendo ser impressos e facilmente colados no seu escritório.

Nesse primeiro post, você poderá baixar algumas versões do jQuery no formato Cheat Sheet.
Façam bom proveito!

Visual jQuery 1.2.6 (formato HTML)
Visual jQuery 1.2.6 (formato HTML)

CheatSheet jQuery 1.2 (formato PNG / versão mobile)
CheatSheet jQuery 1.2 (formato PNG / versão mobile)

CheatSheet jQuery 1.2 (formato PNG / 2 cores)
CheatSheet jQuery 1.2 (formato PNG / 2 cores)

CheatSheet jQuery 1.2 (formato PDF)
CheatSheet jQuery 1.2 (formato PDF)

CheatSheet jQuery 1.1.4 (formato PDF)
CheatSheet jQuery 1.1.4 (formato PDF)

Categorias: CheatSheet, Desenvolvimento web, JavaScript, Tendências
Tags: , , , , ,

« Posts anterioresPróximos posts »

 

Valid XHTML 1.0 Strict Valid CSS!

Luiz Paulo | tecnologia web