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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-26 10:22   255   0

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。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP