SlideShare uma empresa Scribd logo
Javascript para
Desenvolvedores C#
Sobre o curso
Javascript
Comparação
Parte 1:
Functions
Parte 2:
Conceitos
Parte 3:
POO
Parte 4:
Javascript para CSharpers
Javascript para desenvolvedores acostumados com os demais
conceitos do .Net
+Conceitos
Sumário
• Lições práticas
• Código estrito
• Laços
• Reflection
• A natureza do Javascript
• Arquitetando o código
• Bibliotecas
+Conceitos
‘use strict’
• Javascript é popular por permitir um código muito
aberto
• Significa que suas técnicas são mais propensas à bugs
• Para isso existe o modo estrito
//Javascript
(function() {
'use strict';
var x = 'funciona normalmente';
y = 'não procegue';
})();
//qualquer coisa é permitida aqui
+Conceitos
‘use strict’
• O que é desabilitado
• Variáveis não declaradas
• Propriedades duplicadas
• Editar propriedades readonly
• Parâmetros duplicados
• Modificar ‘arguments’
• Deletar variáveis
• Palavras reservadas para
uso futuro
y = 'algum valor'
var x = { name: 'c1', name: 'c2' };
var array = [1, 2, 3, 4, 5];
array.length = 8;
delete array;
implements interface
package private
protected public
static yield
class enum
function(p1, p2, p1) {
arguments = [];
}
+Conceitos
Iterações
• Foreach do C# não é como o for..in do Javascript
• Um objeto nada mais é do que um “dictionary” de
propriedades.
//C#
var array = new[] {"um", "dois", "três"};
foreach (var s in array)
{
//s seria cada string
}
//Javascript
var array = ['um', 'dois', 'três'];
for (var s in array) {
log(s) //0, 1, 2, ??
log(array[s]) //'um', 'dois‘
}
+Conceitos
Reflection
• Enumera todas as propriedades do objeto
• Sua forma mais simples é a iteração for..in
E se eu fizer isso
com o window ou
document ?var cliente = {
nome: 'Juvenal',
cpf: '192.168.10.1',
ativo: true,
'animal de estimação': { especie: 'coelho' },
cancelarAssinatura: function () { }
}
for (var prop in cliente) {
"prop: " + prop;
cliente[prop];
typeof cliente[prop];
}
Javascript para CSharpers 3 - Conceitos
for(var prop in obj){
}
• Faça uma function que receba um objeto e logue para cada uma das
propriedades dele:
• Nome da propriedade
• Valor
• Tipo do valor
• Valor como String
• Valor como Numero
• Valor como Boleano
• Se uma das propriedades for objeto, as propriedades deste devem
ser logadas também
Exercícios
Reflection
+Conceitos
Natureza do Javascript
• No .Net parâmetros são muito bem definidos
• Passar objetos por parâmetro é algo trivial
//C#
var server = new SmtpClient();
//Parametro em construtor
var msg = new MailMessage("from@mail.com","to@mail.com");
msg.Body = "Hello";
msg.Subject = "Test Message";
//Chamando método
server.Send(msg);
+Conceitos
Natureza do Javascript
• No Javascript, é possível passar um parâmetro “aberto”
• DuckTyping te permite construir objetos em qualquer lugar
//Javascript
var server = new SmtpClient();
//Construtor
var msg = {
to: 'to@email.com',
from: 'from@email.com',
body: 'Hello',
subject: 'Test msg'
};
//Chamando
server.send({
});
server.send(msg);
Javascript para CSharpers 3 - Conceitos
Exercícios
Validações
• Implemente a classe SmtpClient e o método Send
• Este método recebe um objeto com as seguintes propriedades: to, from, body, subject.
• Dentro do método, verifique a validade de cada uma dessas propriedades e retorne true ou false
• Caso to ou from forem vazios ou e-mails inválidos, retorne false (“string”.indexOf(‘@’)>=0)
• Se body e subject forem vazias, devem ser substituídas por “No Body” e “No Subject”
respectivamente
• Passe também um callback para logar a mensagem;
• Se tudo estiver preenchido, invoque o callback passando a mensagem;
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
msg.subject = msg.subject || defaults.subject;
msg.body = msg.body || defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
msg.subject = msg.subject || defaults.subject;
msg.body = msg.body || defaults.body;
extend(msg, defaults);
};
function extend (obj, defaults){
for(var prop in defaults){
obj[prop] = obj[prop] || defaults[prop];
}
};
+Conceitos
Arquitetando código
• Em C#, o Assembly delimita o Package
• Javascript é baseado em arquivos, que devem ser referenciados na ordem correta
• É possível separar logicamente isolando em namespaces, corrigindo esse possível problema
<html>
...
<script src="first.js"></script>
<script src="seccond.js"></script>
</html>
//first.js
var y = 5;
//seccond.js
log(y);
//first.js
var namespace=window.namespace|| {}
(function(ns) {
ns.Cliente = function() {
this.nome = "";
};
})(window.namespace=window.namespace|| {});
//seccond.js
var namespace=window.namespace|| {}
(function(ns) {
ns.Animal = function() {
this.comida = “nada";
};
})(window.namespace=window.namespace|| {});
+Conceitos
Referenciando
• Assim como se usa ‘using’ em C# para referenciar
bibliotecas de terceiros
• Basta usar uma tag script para fazer o mesmo
• E sair usando
<html>
<script src="toastr.js"></script>
</html>
Javascript para CSharpers 3 - Conceitos
Quiz
• “use strict” é equivalente ao “unsafe” do C#
• True
• False
• Em “for (var p in produtos)” o sendo que
‘produtos’ é um array, ‘p’ é:
• Um produto
• O index do produto
• Em “for (var p in produto)” o sendo que
‘produto’ é um objeto, ‘p’ é:
• O index do produto
• Uma propriedade do produto
• O nome de uma propriedade
Quiz
• “use strict” é equivalente ao “unsafe” do C#
• True
• False
• Em “for (var p in produtos)” o sendo que
‘produtos’ é um array, ‘p’ é:
• Um produto
• O index do produto
• Em “for (var p in produto)” o sendo que
‘produto’ é um objeto, ‘p’ é:
• O index do produto
• Uma propriedade do produto
• O nome de uma propriedade
Resumo
• A qualidade do código pode ser melhorada com ‘use strict’
• Passar argumentos como
• objetos inteiros dentro de functions
• Functions por functions
• Functions invocadas e já pegando o resultado
• Para usar bibliotecas, basta referenciar e chamar
• Reflection é sempre um bom recurso para fazer algo mais legal
• Faça um montador de objetos dinâmico
Javascript para CSharpers
Javascript para desenvolvedores acostumados com os demais
conceitos do .Net

Mais conteúdo relacionado

PDF
Ajax em java
PDF
Javascript Orientado a Objetos - Fisl12
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
PPT
Apresentação sobre MVVMC
PPTX
07 construtores e finalize
KEY
Design Patterns on Rails
PDF
Como o Cucumber Funciona
PDF
Doctrine 2 camada de persistência para php
Ajax em java
Javascript Orientado a Objetos - Fisl12
Palestra Desenvolvimento Ágil para Web com ROR UVA
Apresentação sobre MVVMC
07 construtores e finalize
Design Patterns on Rails
Como o Cucumber Funciona
Doctrine 2 camada de persistência para php

Mais procurados (18)

PDF
Como criar Custom Tags
PDF
Introdução JavaScript e DOM 2016
PPTX
Javascript OO
PPT
Desenvolvimento Agil Com Doctrine Orm
PPT
55 New Things in Java 7 - Brazil
PPT
Tutorial Dwr - Configuração e Uso
PPT
BDD: Cucumber + Selenium + Java
PDF
Apresentação ruby + rails 2014
PDF
Introdução a Linguagem de Programação Ruby
PPT
Treinamento ajax 03
PPT
Apresentação Ruby no Dojo da UFBA
PDF
Cucumber: um breve review
PDF
Introdução à programação em Ruby
PDF
BDD com Cucumber
PPT
Aula 02 implementação objeto
PDF
Abstração do banco de dados com PHP Doctrine
PDF
Palestra Ruby
PPTX
Curso ruby on rails
Como criar Custom Tags
Introdução JavaScript e DOM 2016
Javascript OO
Desenvolvimento Agil Com Doctrine Orm
55 New Things in Java 7 - Brazil
Tutorial Dwr - Configuração e Uso
BDD: Cucumber + Selenium + Java
Apresentação ruby + rails 2014
Introdução a Linguagem de Programação Ruby
Treinamento ajax 03
Apresentação Ruby no Dojo da UFBA
Cucumber: um breve review
Introdução à programação em Ruby
BDD com Cucumber
Aula 02 implementação objeto
Abstração do banco de dados com PHP Doctrine
Palestra Ruby
Curso ruby on rails
Anúncio

Destaque (16)

PDF
IPSF DREAMBUS Newsletter 02
XLSX
Compes agroindustrial
PDF
Warhorse pride 130 20130905
PDF
Fete internet antibes 2011 - Recherche sur Internet
PPT
La Ley De Dependencia
PPS
Real Hero
PPTX
Javascript para CSharpers 4 - POO
DOCX
CURRICULUM VITAE Odeh Shayeb
PDF
Dissertacao ricardo guarnieri
PPTX
Dojrzaloscszkolna
DOCX
Ekology barnaul olimp
PPSX
Examen nacional diseno_de_proyectos
PPTX
Apereo oaai presentation
PPTX
Presentació Comms Together
PPTX
The use of social media to enhance the student experience from pre applicatio...
IPSF DREAMBUS Newsletter 02
Compes agroindustrial
Warhorse pride 130 20130905
Fete internet antibes 2011 - Recherche sur Internet
La Ley De Dependencia
Real Hero
Javascript para CSharpers 4 - POO
CURRICULUM VITAE Odeh Shayeb
Dissertacao ricardo guarnieri
Dojrzaloscszkolna
Ekology barnaul olimp
Examen nacional diseno_de_proyectos
Apereo oaai presentation
Presentació Comms Together
The use of social media to enhance the student experience from pre applicatio...
Anúncio

Semelhante a Javascript para CSharpers 3 - Conceitos (20)

PPTX
Javascript para CSharpers 2 - Functions
PDF
Curso JavaScript - Aula de Introdução como Programar
PDF
Introdução a JavaScript
PPTX
PPTX
Javascript para CSharpers 1 - Comparando
PPTX
Introdução ao JS1.pptx
PDF
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
PPTX
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
PDF
Linguagem de Programação Java para Iniciantes
PDF
Introdução à MEAN Stack
ODP
Curso Ruby
PDF
PDF
Minicurso javascript
PDF
(A06) LabMM3 - JavaScript
PDF
T11_LM3: Subalgoritmose colisões (2013-2014)
PDF
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
PDF
Esta começando a programar para a web? Então começe com Rails
PPTX
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
PDF
Java script
PDF
LabMM3 - Aula teórica 09
Javascript para CSharpers 2 - Functions
Curso JavaScript - Aula de Introdução como Programar
Introdução a JavaScript
Javascript para CSharpers 1 - Comparando
Introdução ao JS1.pptx
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Linguagem de Programação Java para Iniciantes
Introdução à MEAN Stack
Curso Ruby
Minicurso javascript
(A06) LabMM3 - JavaScript
T11_LM3: Subalgoritmose colisões (2013-2014)
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Esta começando a programar para a web? Então começe com Rails
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
Java script
LabMM3 - Aula teórica 09

Mais de Wesley Lemos (11)

PPTX
Javascript para CSharpers - Append B - jQuery
PPTX
Javascript para CSharpers - Append A - DOM
PPTX
Dicas sobre amamentar
PPTX
Apresentação VideoSis
PPT
Lição ebd
PPTX
Learn with portals!
PPT
Go project
PPT
Criatividade
PPTX
Asus a7 v400 mx se
PPT
Como fazer uma apresentação de sucesso
PPT
Hotelaria
Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append A - DOM
Dicas sobre amamentar
Apresentação VideoSis
Lição ebd
Learn with portals!
Go project
Criatividade
Asus a7 v400 mx se
Como fazer uma apresentação de sucesso
Hotelaria

Último (7)

PDF
Dos requisitos ao código: como criar código rastreável em PHP
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Evolução em código: algoritmos genéticos com PHP
PDF
apresentacao introducao computacao ead.pdf
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Mapeamento de Objeto para Tabela Relacional
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Dos requisitos ao código: como criar código rastreável em PHP
Curso de Windows 11 resumido na prática.pptx
Evolução em código: algoritmos genéticos com PHP
apresentacao introducao computacao ead.pdf
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Mapeamento de Objeto para Tabela Relacional
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO

Javascript para CSharpers 3 - Conceitos

  • 2. Sobre o curso Javascript Comparação Parte 1: Functions Parte 2: Conceitos Parte 3: POO Parte 4:
  • 3. Javascript para CSharpers Javascript para desenvolvedores acostumados com os demais conceitos do .Net
  • 4. +Conceitos Sumário • Lições práticas • Código estrito • Laços • Reflection • A natureza do Javascript • Arquitetando o código • Bibliotecas
  • 5. +Conceitos ‘use strict’ • Javascript é popular por permitir um código muito aberto • Significa que suas técnicas são mais propensas à bugs • Para isso existe o modo estrito //Javascript (function() { 'use strict'; var x = 'funciona normalmente'; y = 'não procegue'; })(); //qualquer coisa é permitida aqui
  • 6. +Conceitos ‘use strict’ • O que é desabilitado • Variáveis não declaradas • Propriedades duplicadas • Editar propriedades readonly • Parâmetros duplicados • Modificar ‘arguments’ • Deletar variáveis • Palavras reservadas para uso futuro y = 'algum valor' var x = { name: 'c1', name: 'c2' }; var array = [1, 2, 3, 4, 5]; array.length = 8; delete array; implements interface package private protected public static yield class enum function(p1, p2, p1) { arguments = []; }
  • 7. +Conceitos Iterações • Foreach do C# não é como o for..in do Javascript • Um objeto nada mais é do que um “dictionary” de propriedades. //C# var array = new[] {"um", "dois", "três"}; foreach (var s in array) { //s seria cada string } //Javascript var array = ['um', 'dois', 'três']; for (var s in array) { log(s) //0, 1, 2, ?? log(array[s]) //'um', 'dois‘ }
  • 8. +Conceitos Reflection • Enumera todas as propriedades do objeto • Sua forma mais simples é a iteração for..in E se eu fizer isso com o window ou document ?var cliente = { nome: 'Juvenal', cpf: '192.168.10.1', ativo: true, 'animal de estimação': { especie: 'coelho' }, cancelarAssinatura: function () { } } for (var prop in cliente) { "prop: " + prop; cliente[prop]; typeof cliente[prop]; }
  • 10. for(var prop in obj){ } • Faça uma function que receba um objeto e logue para cada uma das propriedades dele: • Nome da propriedade • Valor • Tipo do valor • Valor como String • Valor como Numero • Valor como Boleano • Se uma das propriedades for objeto, as propriedades deste devem ser logadas também Exercícios Reflection
  • 11. +Conceitos Natureza do Javascript • No .Net parâmetros são muito bem definidos • Passar objetos por parâmetro é algo trivial //C# var server = new SmtpClient(); //Parametro em construtor var msg = new MailMessage("from@mail.com","to@mail.com"); msg.Body = "Hello"; msg.Subject = "Test Message"; //Chamando método server.Send(msg);
  • 12. +Conceitos Natureza do Javascript • No Javascript, é possível passar um parâmetro “aberto” • DuckTyping te permite construir objetos em qualquer lugar //Javascript var server = new SmtpClient(); //Construtor var msg = { to: 'to@email.com', from: 'from@email.com', body: 'Hello', subject: 'Test msg' }; //Chamando server.send({ }); server.send(msg);
  • 14. Exercícios Validações • Implemente a classe SmtpClient e o método Send • Este método recebe um objeto com as seguintes propriedades: to, from, body, subject. • Dentro do método, verifique a validade de cada uma dessas propriedades e retorne true ou false • Caso to ou from forem vazios ou e-mails inválidos, retorne false (“string”.indexOf(‘@’)>=0) • Se body e subject forem vazias, devem ser substituídas por “No Body” e “No Subject” respectivamente • Passe também um callback para logar a mensagem; • Se tudo estiver preenchido, invoque o callback passando a mensagem;
  • 15. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; };
  • 16. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; };
  • 17. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; };
  • 18. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; msg.subject = msg.subject || defaults.subject; msg.body = msg.body || defaults.body; };
  • 19. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; msg.subject = msg.subject || defaults.subject; msg.body = msg.body || defaults.body; extend(msg, defaults); }; function extend (obj, defaults){ for(var prop in defaults){ obj[prop] = obj[prop] || defaults[prop]; } };
  • 20. +Conceitos Arquitetando código • Em C#, o Assembly delimita o Package • Javascript é baseado em arquivos, que devem ser referenciados na ordem correta • É possível separar logicamente isolando em namespaces, corrigindo esse possível problema <html> ... <script src="first.js"></script> <script src="seccond.js"></script> </html> //first.js var y = 5; //seccond.js log(y); //first.js var namespace=window.namespace|| {} (function(ns) { ns.Cliente = function() { this.nome = ""; }; })(window.namespace=window.namespace|| {}); //seccond.js var namespace=window.namespace|| {} (function(ns) { ns.Animal = function() { this.comida = “nada"; }; })(window.namespace=window.namespace|| {});
  • 21. +Conceitos Referenciando • Assim como se usa ‘using’ em C# para referenciar bibliotecas de terceiros • Basta usar uma tag script para fazer o mesmo • E sair usando <html> <script src="toastr.js"></script> </html>
  • 23. Quiz • “use strict” é equivalente ao “unsafe” do C# • True • False • Em “for (var p in produtos)” o sendo que ‘produtos’ é um array, ‘p’ é: • Um produto • O index do produto • Em “for (var p in produto)” o sendo que ‘produto’ é um objeto, ‘p’ é: • O index do produto • Uma propriedade do produto • O nome de uma propriedade
  • 24. Quiz • “use strict” é equivalente ao “unsafe” do C# • True • False • Em “for (var p in produtos)” o sendo que ‘produtos’ é um array, ‘p’ é: • Um produto • O index do produto • Em “for (var p in produto)” o sendo que ‘produto’ é um objeto, ‘p’ é: • O index do produto • Uma propriedade do produto • O nome de uma propriedade
  • 25. Resumo • A qualidade do código pode ser melhorada com ‘use strict’ • Passar argumentos como • objetos inteiros dentro de functions • Functions por functions • Functions invocadas e já pegando o resultado • Para usar bibliotecas, basta referenciar e chamar • Reflection é sempre um bom recurso para fazer algo mais legal
  • 26. • Faça um montador de objetos dinâmico
  • 27. Javascript para CSharpers Javascript para desenvolvedores acostumados com os demais conceitos do .Net

Notas do Editor

  • #9: var cliente = {     nome: 'Juvenal',     cpf: '192.168.10.1',     ativo: true,     'animal de estimação': { especie: 'coelho' },     cancelarAssinatura: function () { } } for (var prop in cliente) {     "prop: " + prop;     cliente[prop]     typeof cliente[prop] }