HAND工作学习20200917抓取路由有关页面跳转

 

Location hash 属性


定义和用法

hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)。

语法

location.hash

实例

返回一个 URL 的主要部分。假设当前的 URL 是 http://www.runoob.com/test.htm#PART2:

document.write(location.hash);

以上实例输出结果:

#part2

window.location.href(设置或获取整个 URL 为字符串)

window.location.protocol(设置或获取 URL 的协议部分)

window.location.host(设置或获取 URL 的主机部分)

window.location.port(设置或获取与 URL 关联的端口号码)

判空处理工作中

this.state.list && array.isarray(list) && list[0]&&

this.props.a && this.props.a.b ? this.props.a.b.c : undefined

彻底理解js中的&&和||

javascript中,&&和||的用法比较神奇,经常用在对象上,例如a || b,如果a不存在,则返回b。a && b,如果a存在,则返回b,否则返回a。

光这样看,感觉他的概念还挺复杂的,这样去想的话,不但会在脑子里多出一个无用的概念,而且越记越混乱。看问题还是要看本质。

 

本质是什么呢?&& 和 || 的作用只有一个(定义):

进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果之后,就返回哪个变量。

 

在javascript中:

以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN

其他都是true。注意:字符串"false"也会被当做true处理,在未转型的情况下他是字符串,属于一个对象,所以是true。

 

所以:

a || b:如果a是true,那么b不管是true还是false,都返回true。因此不用判断b了,这个时候刚好判断到a,因此返回a。

   如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false,其实不就是返回b了吗。

a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了,这个时候刚好判断到a,因此返回a。

   如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。

 

来个复杂的例子(注意一点:在js中&&运算符优先级大于||)

假设:

 var a=new Object(),b=0,c=Number.NaN,d=1,e="Hello"; 

  alert(a || b && c || d && e);  表达式从左往右执行,先&&后||

    1、(b && c):b是false,此时不需要判断c,因为不管c是true是false,最终结果一定是false,因此返回当前判断对象b,也就是0;

    2、(d && e):d是true,这个时候判断e,此时不管e是true,是false,返回结果一定是e,e为true,因此返回"Hello";

    3、(a || b):a是true,此时不管b是true是false,结果都是true,所以不判断b,所以返回当前判断对象a,因此返回new Object();

    4、(a || e):同上,因此返回a。

这个表达式最终结果为a,也就是new Object()

 

JS中isPrototypeOf 和hasOwnProperty 的区别

1、isPrototypeOf 
isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false。 
格式如下: 
object1.isPrototypeOf(object2); 
object1是一个对象的实例; 
object2是另一个将要检查其原型链的对象。 
原型链可以用来在同一个对象类型的不同实例之间共享功能。 
如果 object2 的原型链中包含object1,那么 isPrototypeOf 方法返回 true。 
如果 object2 不是一个对象或者 object1 没有出现在 object2 中的原型链中,isPrototypeOf 方法将返回 false。 

2、hasOwnProperty 
hasOwnProperty判断一个对象是否有名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。 
如果该属性或者方法是该 对象自身定义的而不是器原型链中定义的 则返回true;否则返回false; 
格式如下: 
object.hasOwnProperty(proName); 
判断proName的名称是不是object对象的一个属性或对象。

本文转自:http://www.cnblogs.com/ppforever/p/3921481.html

原创文章请随便转载。愿和大家分享,并且一起进步。-- 江 coder

 

 

js使用in和hasOwnProperty获取对象属性的区别

in判断的是对象的所有属性,包括对象实例及其原型的属性; 
而hasOwnProperty则是判断对象实例的是否具有某个属性。

示例代码:

 

<script type="text/javascript">
    function Person(){
        }
        Person.prototype.name = "allen";

        var person = new Person();
        console.log(person.hasOwnProperty("name")); //false
        console.log("name" in person); //true
        console.log(person.name); //"allen"

        person.name = "justforse";
        console.log(person.hasOwnProperty("name")); //true
        console.log("name" in person); //true
        console.log(person.name); //"justforuse"

        delete person.name;
        console.log(person.hasOwnProperty("name")); //false
        console.log("name" in person); //true
        console.log(person.name); //"allen"
</script>

 

以上代码执行的时候,name属性要么是从实例中获取的,要么是来源于原型,所以使用in 来访问 name属性始终返回true;而hasOwnProperty()只在属性存在与对象实例中时才返回true,当删除了实例中的name属性后,就恢复了原型中name属性的连接,所以返回allen。

 

js属性对象的hasOwnProperty方法

Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。

判断自身属性是否存在

var o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');  // true
changeO();
o.hasOwnProperty('prop');  // false

判断自身属性与继承属性

function foo() {
  this.name = 'foo'
  this.sayHi = function () {
    console.log('Say Hi')
  }
}

foo.prototype.sayGoodBy = function () {
  console.log('Say Good By')
}

let myPro = new foo()

console.log(myPro.name) // foo
console.log(myPro.hasOwnProperty('name')) // true
console.log(myPro.hasOwnProperty('toString')) // false
console.log(myPro.hasOwnProperty('hasOwnProperty')) // fasle
console.log(myPro.hasOwnProperty('sayHi')) // true
console.log(myPro.hasOwnProperty('sayGoodBy')) // false
console.log('sayGoodBy' in myPro) // true

遍历一个对象的所有自身属性

在看开源项目的过程中,经常会看到类似如下的源码。for...in循环对象的所有枚举属性,然后再使用hasOwnProperty()方法来忽略继承属性。

var buz = {
    fog: 'stack'
};

for (var name in buz) {
    if (buz.hasOwnProperty(name)) {
        alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
    }
    else {
        alert(name); // toString or something else
    }
}
  

注意 hasOwnProperty 作为属性名

JavaScript 并没有保护 hasOwnProperty 属性名,因此,可能存在于一个包含此属性名的对象,有必要使用一个可扩展的hasOwnProperty方法来获取正确的结果:

var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // 始终返回 false

// 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法
// 使用另一个对象的`hasOwnProperty` 并且call
({}).hasOwnProperty.call(foo, 'bar'); // true

// 也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

js中typeof判断数据类型

js变量能够保存多种数据类型数值、字符串值、布尔值、数组、对象等等;

eg:var length=7;

  var lastName="Gates";

  var x=true;

  var y=false;

  var cars=["NISSAN","白色","日产"];

       var x={firstName:"Bill",lastName:"Gates",age:"18"};

 

 

typeof运算符

您可使用js的typeof来确定js变量的类型

typeof运算符返回变量或表达式的类型:

typeof  0  //返回"number"

typeof  " "   //返回"string"

typeof  "Bill"  //返回"string"

typeof true   //返回"boolean"

typeof false  //返回"boolean"

typeof  x   //返回““undefined(假如x没有值)”

 

特殊情况:

typeof 运算符对数组返回“object”,因为在js中数组属于对象。

1、在js中,没有值的变量,其值是undefined。typeof也返回undefined。

  eg:var car;

        typeof car;   //返回"undefined"

2.空值与undefined不一样。

空的字符串既有值也有类型。

eg:var car=" ";

  typeof car;  //返回"string"

3.var person=null;  //返回object

 

typeof运算符把对象、数组或null返回object。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值