JavaScript初识

JavaScript初识

JavaScript简介

  • JavaScript 是一种轻量级的编程语言。
  • JavaScript 是可插入 HTML 页面的编程代码。
  • JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
    JavaScript 由 Brendan Eich 发明。它于 1995 年出现在 Netscape 中(该浏览器已停止更新),并于 1997 年被 ECMA(一个标准协会)采纳。因此也可以叫ECMAScript.

变量

在JavaScript中,变量统一用var声明。
变量的取名有要求:

  • 变量名必须以英文字母、下划线 ‘-’、’$'开头。
  • 可以包含数字,但是作为不能开头。
  • 不能使用关键字、保留字作为变量名。

变量可分为原始值和引用值。
原始值包括:Number(默认浮点型)、Boolean(true/false)、String(‘’/“”)、undefined(未声明)、null(空)。
引用值包括:array、object、function、data等。
原始值存于stack栈中,赋值方式为拷贝。(先进后出)。
引用值存于heap堆中,复制的是地址。

举个栗子:

var a = 10;
var b = a;
a = 20;
Document.write(b);

毫无疑问输出b为10;

var ar = [1,2];
var ar1 = ar;
ar = [1,3];/*开辟新的空间*/
console.log(ar1);

然而ar1的值为1,2;
这就是两种值的存储方式不同造成的结果。

运算符

+、-、*、/、++、–

  1. + 除了数学计算中的加法功能外,还能用于字符串的连接。
  2. 任何数据类型 **+**字符串都等与字符串。
  3. document.write(a++)代表先输出a,在++;
  4. ++a 则是先计算再赋值。

下面看一道栗子

var a = 10;
var b = ++a - 1 + a++;

++a为11,此时a为11,a先给a++赋值,此时a++为11,a为12.
输出b的值为21

<、>、== 、===

  • ‘<’,’>’ 比较后输出布尔值。当“a”<"b"成立时,返回true。
  • ‘==’ 代表判断是否相等,当字符串类型1与数字类型1比较时判断为正确。
  • ===而有绝对相等的符号,此时只有当数据类型也相等时才能判断为相等。

对于引用类型的变量,== 和 ===只会判断引用的地址是否相同,而不会判断对象具体里属性以及值是否相同。因此,如果两个变量指向相同的对象,则返回true。

逻辑运算符

逻辑运算符包括 && (与)、||(或)、(非)。

  • 与运算的规则:
    先看第一个表达式转换成布尔值的结果,如果结果为真,
    那么会看第二个布尔值的结果,如果只有两个表达式,
    只看到第二个表达式,就可以返回该表达式的值了。
    如果第一个为假,则false。
    全真才为真,一假则假。
    var a = 1 && 2;
    document.write(a);

a的值为2。

  • &&
    可作为中断符,短路语句。
  • &与运算
    换成二进制再与运算。
  • ||遇真则返回。全假才为假。
    可以用来写兼容。
  • !取成布尔值再取反。

这些运算符的操作数不一定是布尔型的。JavaScript会通过简单的转换规则,将一些非布尔类型的值转换成布尔型的。大多数的值都会转换成true,只有少数的是false,他们分别是:false, 0, -0, “”, NaN, null, undefined,因为存在数字和字符串以及对象的值为false,所以,直接用真值转换来判断一个函数的参数是否传进来了,这是不不太安全的。比如,有一个可以具有默认值得可选参数的函数,如下:

function point(x, y) {
if (!x) {
    x = 320;
}
if (!y) {
    y = 240;
}
    return { x: x, y: y };
}

这个函数会忽略任何的真值为假的参数的,包括0,-0;

    point(0, 0); // { x: 320, y: 240 }

检测undefined的更加准确的方法是用typeof操作:

复制代码

    function point(x, y) {
    if (typeof x === "undefined") {
        x = 320;
    }
    if (typeof y === "undefined") {
        y = 240;
    }
        return { x: x, y: y };
    }

复制代码
这种写法,可以区分开0和undefined的:

    point(); // { x: 320, y: 240 }
    point(0, 0); // { x: 0, y: 0 }

数据类型

typeof
确定数据类型
number string boolean object undefined function(函数)

    var num = true;
    console.log(typeof(num));

输出得到boolean;

也可以用如下格式 typeof 123

不同于C语言,不同数据类型间可以进行加减运算。
如 ‘2’-1,或者‘2’-‘1’;
constructor
constructor 属性返回所有 JavaScript 变量的构造函数。
可以使用 constructor 属性来查看对象是否为数组 (包含字符串 “Array”),如下例:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = isArray(fruits);
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

可以使用 constructor 属性来查看对象是否为日期 (包含字符串 “Date”):

var myDate = new Date();
document.getElementById("demo").innerHTML = isDate(myDate);
function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

类型转换

在编译过程中,经常使用到强制类型转换,常见的有:

  • Number(a) :将a强制转换为数字类型。
  • ParseInt() :转换为整形。
  • ParseFloat(string):将字符串转化成浮点。
  • String(mix):转换成字符串。
  • Boolean(mix):转换成布尔值。

ParseInt() 还能实现进制转换
ParseInt(a,2):将二进制的a转换成十进制
相似的 toString能将十进制转化成多种进制。

隐形类型转换

在上文中,之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加:

    3 + true; // 4

结果是一个数值型!
如果是在C语言中,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但是,在JavaScript中,只有少数情况下,错误类型才会导致出错,比如调用非函数,或者读取null或者undefined的属性时,如下:

    "hello"(1); // error: not a function
    null.x; // error: cannot read property 'x' of null

多数情况下,JavaScript都不会出错的,而是自动的进行相应的类型转换。比如-, *, /,和%等算术运算符都会把操作数转换成数字的,但是“+”号就有点不一样了,有些情况下,它是算术加号,有些情况下,是字符串连接符号,具体的要看它的操作数.

JavaScript会自动把数字转换成字符的,不管数字在前还是字符串在前,字符串和数字相加结果是字符串.

但是,隐式类型转换,有时候,会隐藏一些错误的,比如,null会转换成0,undefined会转换成NaN。需要注意的是,NaN和NaN是不相等的.
即任何值都不等于NaN,包括他自己。
因此利用这个性质,我们可以检测某个值是不是NaN。


var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值