值和类型

类型

js中的变量是没有类型的,只有值才有类型,变量可以随时接受任何类型。例如:

     var a = 42;
        console.log(typeof a); //number
        a = ‘44‘;
        console.log(typeof a);//string

undefind 和 undeclared

在js中,已在作用域声明但还没赋值的变量,是undefined。相反还没在作用域中声明过的变量是undeclared

var a;
console.log(typeof a); //undefined
console.log(b);//Uncaught ReferenceError: b is not defined

需要特别注意的是如果用typeof undeclared 时,会返回undefined。

console.log(typeof b);//undefined

但是这种方式有一个好处就是可以通过typeof来检查变量是否声明过,而不会报错。例如:

if (b) {   //这种方式会报错
    //do something
}

if (typeof b !== "undefined") {
    //do something
}

if (window.b) { //也可以用这种方式 但如果代码会在其他环境中执行的话,会有问题,例如nodejs,全局对象就不是window了。
    //do something
}

数组

数组内部可以放任意类型的元素,也可创建稀疏数组。

var a = [];
a[0] = ‘1a‘;
a[2] = ‘23‘;

这里需要注意a[1]的值是undefined。
数组也可以像对象一样有自己的属性,例如:

a[‘name‘] = ‘yu‘;
console.log(a.length);//3

但是数组的属性并不会改变length属性。还有一点需要注意的是,如果属性名称可以转换为十进制数字的话,那么它就会被当做索引来处理。例如:

a[‘13‘] = ‘a‘;
console.log(a.length); //14

类数组

一般在一些dom查询操作返回的元素列表,其实他们并非是真正意义的数组,而是一些类数组。在jq内部经常会使用类数组。

var a = { 1: ‘a‘, 2: ‘b‘, length: 2 };

还一个例子是arguments就是一个类数组,但在es6开始已经废止。
常用的转换类数组为真正的数组的方式为:

var arr = Array.prototype.splice.call(a);

在es6中Array新增了一个内置函数 Array.from() 也可以实现转换功能,例如:

var arr = Array.from(a);

字符串

字符串和字符串数组在很多情况下看起来是一样的,但他们并不是一回事。他们都有length属性和indexof等方法。

var a = ‘abc‘;
var b = [‘a‘, ‘b‘, ‘c‘];
console.log(a.length);//3
console.log(b.length);//3
console.log(a.indexOf(‘b‘));//1
console.log(b.indexOf(‘b‘));//1

但是字符串是不可变的,只能创建一个新的字符串并返回,而字符串数组可以在原始值改变的。

a[1] = ‘v‘;
b[1] = ‘v‘;
console.log(a);//abc
console.log(b);//["a", "v", "c"]

在实际开发过程中我们可以借用数组的方法来达到某些目的。

var c = Array.prototype.join.call(a,‘-‘);
console.log(c);//a-b-c

还有一个常见的面试题就是字符串反转问题。
数组上有一个reverse方法,用来反转数组元素,但是我们这里却无法借用,因为字符串是不可变的。
但是我们可以先把字符串转成数组,在进行反转。

var a = ‘xyz‘;
var b = a.split(‘‘).reverse().join();
console.log(b); //z, y, x

数字

时间: 2024-10-07 12:05:02

值和类型的相关文章

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现.子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常

【javascript】详解变量,值,类型和宿主对象

前言 我眼中的<javascript高级程序设计> 和<你不知道的javascript>是这样的:如果<javascript高级程序设计>是本教科书的话, <你不知道的javascript>就是那本王后雄有以下两点: 1. 老师会教你: 考试最后的准备仍然要“回归课本”2. 在1的前提下并不妨碍我们希望拥有一本好用的“王后雄” JS数据类型 JS类型分类 讲到类型, 首先要说的当然是JS的类型分类, 对于这一点,<javascript高级语言程序设计&

jquery ajax和php实现返回值 json类型

js页面 $.ajax({ type: “POST”, dataType: ‘json’, url: “add_vote.php”, data: “touid=”+uid+”&tousername=”+username, success: function(msg){ //json解析方法一 var dataObj=eval("("+msg+")");//转换为json对象 alert(dataObj.goods_list);//输出root的子对象数量 /

Override和Overload区别,Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思, Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现. 子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子

方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表现. 1.重写overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现. 2.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding). 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"

javascript检测基本类型值或引用类型值的类型方法

首先javascript的数据类型分为两种数据类型:基本数据数据类型和引用数据类型 基本数据类型:Number,String,Boolean,Undefined,Null.原始值,是简单的数据段,可按值访问,直接操作保存在变量中的实际值 引用数据类型:Object,Array,Function,Date,RegExp,单体内置对象(Math,window(客户端才有的全局对象),global(服务端才有的全局对象)).引用值,是保存在栈内存中的对象,是有多个值构成的对象,与其他语言不同的是:你不

DataGridView中添加CheckBox(与DataSource分开添加) &amp; C# winform单元格的formatted值的类型错误异常解决

1,编辑DataGridView,添加一列 CheckBox ,Name 赋值为 "select",ColumnType 设置为"dATAGridViewCheckBoxColumn",HeaderTest 可以设置为想要的列名,如下图: 2. Debag 显示窗体的时候,会报 “System.FormatException:单元格的Formatted值的类型错误.要替换此默认对话框,请处理DataError事件" 的异常,点击确定出现新的提示: [Dat

js值的类型和函数传参

javascript中所有函数的参数都是按值传递的! 由于js中的值分为基本类型值和引用类型值,所以才会出现函数对外部值改变情况的不同. 基本类型值指简单的数据段,而引用类型值指那些可能由多个值构成的对象. 5种基本类型(Undefined  Null  String  Number  Boolean)是按值访问的,可以操作保存在变量中的实际的值: 引用类型的值是保存在内存中的对象,javascript不允许用户直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,因此,

spring处理方法返回值的类型

spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModeAndView: @RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndVi