javascript 容易误解的地方

(1)使用for…in遍历对象时,不仅会遍历对象中的属性和方法,同时也会遍历类的原型中的属性和方法

var Person=function(){
  this.username="huangweii";
  this.age=27;
  this.sayHello=function()
  {
    console.log("username is :"+this.username);
  }
}
Person.prototype.sex='man';
Person.prototype.eat=function(){
  console.log('eat...');
}
var person=new Person();
person.sayHello();
console.log('------------------------');
for(var i in person){
  console.log("key:\t"+i);
}

运行结果:

(2)

alert(name123);

运行结果:
报错:ReferenceError: name123 is not defined

alert(name123);
//var name123=”whuang”;
但是:

alert(name123);
var name123="whuang";

运行结果:undefined

(3)

function sayHello(username,age)
{
  arguments[1]=23;
  console.log('my name is '+username+" , age is "+age);
}

sayHello('whuang',24);

预期结果:my name is whuang , age is 24
运行结果:
my name is whuang , age is 23

(4)声明但是不赋值就不会改变原来的值

var username333='whuang';
var username333;
console.log(username333);

运行结果:
whuang

经验:当我们不确定变量是否被声明,但是又需要调用时,我们可以声明一下,防止报错.
因为声明但是不赋值就不会改变原来的值

(5)判断变量是否被声明过
通过if判断:

if(abcaa11112)//error
{
  console.log(abcaa11112);
}else{
    console.log('没有被声明过');
}

运行结果:
总结:通过if判断不保险.

正确的做法是通过typeof 来判断

console.log(typeof abcaa11112);//ok

运行结果:undefined

当然也可以通过下面的方式来判断:

if(window.abcaa11112)//ok
{
  console.log(window.abcaa11112);
}else{
    console.log('没有被声明过');
}

注意:在变量前增加了”window.”

时间: 2024-11-01 11:33:19

javascript 容易误解的地方的相关文章

我这段javascript代码身噩梦地方有问题?用基本的算法定位子字符串在父字符串中首次出现的位置?

问题描述 我这段javascript代码身噩梦地方有问题?用基本的算法定位子字符串在父字符串中首次出现的位置? function find(){ var string1=document.getElementById('string').value; var substring1=document.getElementById('substring').value; for (var i=0;i<string1.length;i++) { document.write(string1[i]+'

java 中容易误解的地方

1,equals @Test public void test_equal(){ String a="1"; int b=1; boolean result=a.equals(b); System.out.println(result); } 原因:equals 比较时自动把转化为包装类型了 运行结果是: false 应该改为: @Test public void test_equal(){ String a="1"; int b=1; boolean result

判断变量是否被声明过

方式一:使用typeof if (typeof(i)=== "undefined"){console.log(false)}else{console.log(true)} 方式二: if(window.abcaa11112)//ok { console.log(window.abcaa11112); }else{ console.log('没有被声明过'); } 参考: javascript 容易误解的地方

Mysql分区表使用的一些限制和需要注意的地方

mysql分区策略都基于两个非常重要的假设:查询都能够过滤(prunning)掉很多额外的分区.分区本身并不会带来很多额外的代价.而事实证明,这两个假设在某些场景下会有问题.下面介绍一些可能会遇到的问题. NULL位会使分区过滤无效   关于分区表一个容易让人误解的地方就是分区的表达式的值可以是NULL:第一个分区是一个特殊分区.假设按照PARTITION BY     RANGE YEAR(order_date)分区,那么所有order_date为NULL或者是一个非法值的时候,记录都会被存放

C#后台调用前台javascript的五种方法小结

在网上找了找,发现有三种方法可以访问到前台代码: 第一种,OnClientClick (vs2003不支持这个方法) <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="client_click()" /> client_click() 就是javascript的一个方法. 第二种,Button1.Attributes.Add(&

JavaScript Function函数类型介绍

 // 在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例;而且都与其他引用类型一样具有属性和方法; // 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针; 一 函数的声明方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1.函数声明方式 function box(num1,num2){ return num1+num2; }   2.函数表达式定义函数 var box = function(num1,num2){

(转)ASP.NET调用javascript脚本的方法总结

1.直接在前台调用 javascript 函数   很简单,在 head 元素之间加入 script 元素,将 type 元素设置为 " text/javascript " 如: <head runat="server"><script type="text/javascript" >function ShowName(str){alert("您的名字为:("+str+")");}&

HTTPS的七个误解(译文)

开发网页的时候,往往需要观察HTTP通信. 我使用的工具主要有两个,在Firefox中是Firebug,在IE中是Fiddler.但是,一直听别人说,付费软件HttpWatch是这方面最好的工具. 前几天,HttpWatch的官方网志刊登了一篇好文章,澄清了一些HTTPS协议容易产生误解的地方.学习之后,我增长了不少网页加密通信的知识. 我觉得这篇文章很实用,值得留作参考,就翻译了出来. ============================================== HTTPS的七

《jQuery Mobile入门经典》—— 2.3 使用JavaScript完成功能

2.3 使用JavaScript完成功能 jQuery Mobile入门经典 我们现在知道如何在网站中使内容具备样式--如果可以在访问者来查看网站的时候让某些事情发生,那可能会挺好.这就是JavaScript发挥作用的地方. 起初,在JavaScript开始引入的时候,获得了一个不好的名声.人们不理解它是什么,或者它有什么用处.我记得我的一个朋友确信他中了病毒,因为每次他访问某一网站的时候,单词会跟随他的鼠标在屏幕上围绕. 对许多人来说,JavaScript成为令人讨厌的东西,充其量不过是一个制